blob: 5e6b20a3a816883bed8f75a3b843741b13740395 [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) :=
293 tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, {
294 tr_GSUP_IE_IMSI(imsi), *, tr_GSUP_IE(OSMO_GSUP_AUTH_TUPLE_IE), * });
295
Harald Weltedfe94dd2018-01-21 13:55:22 +0100296template GSUP_PDU tr_GSUP_UL_REQ(template hexstring imsi) :=
Harald Welte8a1dd532018-01-27 15:38:18 +0100297 tr_GSUP_IMSI(OSMO_GSUP_MSGT_UPDATE_LOCATION_REQUEST, imsi);
Harald Weltedfe94dd2018-01-21 13:55:22 +0100298
Harald Welte6aa04e32018-01-27 15:35:19 +0100299template (value) GSUP_PDU ts_GSUP_UL_RES(hexstring imsi) :=
Harald Weltedfe94dd2018-01-21 13:55:22 +0100300 ts_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_RESULT, { valueof(ts_GSUP_IE_IMSI(imsi)) });
301
Harald Welte6aa04e32018-01-27 15:35:19 +0100302template (value) GSUP_PDU ts_GSUP_UL_ERR(hexstring imsi, integer cause) :=
Harald Welte6ff81902018-01-21 19:09:08 +0100303 ts_GSUP(OSMO_GSUP_MSGT_UPDATE_LOCATION_ERROR, {
304 valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_Cause(cause)) });
305
Harald Welte6aa04e32018-01-27 15:35:19 +0100306template (value) GSUP_PDU ts_GSUP_ISD_REQ(hexstring imsi, hexstring msisdn) :=
Harald Welte6ff81902018-01-21 19:09:08 +0100307 ts_GSUP(OSMO_GSUP_MSGT_INSERT_DATA_REQUEST, {
308 valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_MSISDN(msisdn)) });
309
310template GSUP_PDU tr_GSUP_ISD_RES(template hexstring imsi) :=
Harald Welte8a1dd532018-01-27 15:38:18 +0100311 tr_GSUP_IMSI(OSMO_GSUP_MSGT_INSERT_DATA_RESULT, imsi);
Harald Weltedf327232017-12-28 22:51:51 +0100312
Harald Weltec638f4d2018-01-24 22:00:36 +0100313template GSUP_PDU tr_GSUP_AUTH_FAIL_IND(hexstring imsi) :=
Harald Welte8a1dd532018-01-27 15:38:18 +0100314 tr_GSUP_IMSI(OSMO_GSUP_MSGT_AUTH_FAIL_REPORT, imsi);
Harald Weltedf327232017-12-28 22:51:51 +0100315
Harald Welte167458a2018-01-27 15:58:16 +0100316template (value) GSUP_PDU ts_GSUP_CL_REQ(hexstring imsi, GSUP_CancelType ctype) :=
317 ts_GSUP(OSMO_GSUP_MSGT_LOCATION_CANCEL_REQUEST, {
318 valueof(ts_GSUP_IE_IMSI(imsi)), valueof(ts_GSUP_IE_CancelType(ctype)) });
319
320template GSUP_PDU tr_GSUP_CL_RES(template hexstring imsi) :=
321 tr_GSUP_IMSI(OSMO_GSUP_MSGT_LOCATION_CANCEL_RESULT, imsi);
322
323template GSUP_PDU tr_GSUP_CL_ERR(template hexstring imsi, template integer cause := ?) :=
324 tr_GSUP(OSMO_GSUP_MSGT_LOCATION_CANCEL_ERROR, {
325 tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) });
326
Harald Welte6abb9fe2018-02-17 15:24:48 +0100327template GSUP_PDU tr_GSUP_PURGE_MS_REQ(template hexstring imsi, template GSUP_CnDomain dom := ?) :=
328 tr_GSUP(OSMO_GSUP_MSGT_PURGE_MS_REQUEST, {
329 tr_GSUP_IE_IMSI(imsi), *, tr_GSUP_IE_CnDomain(dom) });
330
331template (value) GSUP_PDU ts_GSUP_PURGE_MS_RES(hexstring imsi) :=
332 ts_GSUP(OSMO_GSUP_MSGT_PURGE_MS_RESULT, {
333 valueof(ts_GSUP_IE_IMSI(imsi)) });
334
Harald Welte167458a2018-01-27 15:58:16 +0100335
336template (value) GSUP_IE ts_GSUP_IE_CancelType(GSUP_CancelType ctype) := {
337 tag := OSMO_GSUP_CANCEL_TYPE_IE,
338 len := 0, /* overwritten */
339 val := {
340 cancel_type := ctype
341 }
342}
343
344template GSUP_IE tr_GSUP_IE_CancelType(template GSUP_CancelType ctype) :=
345 tr_GSUP_IE(OSMO_GSUP_CANCEL_TYPE_IE, GSUP_IeValue:{cancel_type:=ctype});
346
Harald Welte6abb9fe2018-02-17 15:24:48 +0100347template GSUP_IE tr_GSUP_IE_CnDomain(template GSUP_CnDomain domain) :=
348 tr_GSUP_IE(OSMO_GSUP_CN_DOMAIN_IE, GSUP_IeValue:{cn_domain:=domain});
349
Harald Weltedf327232017-12-28 22:51:51 +0100350template GSUP_IE tr_GSUP_IE(template GSUP_IEI iei, template GSUP_IeValue val := ?) := {
351 tag := iei,
352 len := ?,
353 val := val
354}
355
356template (value) GSUP_IE ts_GSUP_IE_IMSI(hexstring imsi) := {
357 tag := OSMO_GSUP_IMSI_IE,
358 len := 0, /* overwritten */
359 val := {
360 imsi := imsi
361 }
362}
363
364template GSUP_IE tr_GSUP_IE_IMSI(template hexstring imsi) := {
365 tag := OSMO_GSUP_IMSI_IE,
366 len := ?,
367 val := {
368 imsi := imsi
369 }
370}
371
Harald Welte6ff81902018-01-21 19:09:08 +0100372template (value) GSUP_IE ts_GSUP_IE_MSISDN(hexstring msisdn) := {
373 tag := OSMO_GSUP_MSISDN_IE,
374 len := 0, /* overwritten */
375 val := {
Harald Welte3f95be82018-01-27 00:48:13 +0100376 msisdn := ts_GSUP_MSISDN(msisdn)
Harald Welte6ff81902018-01-21 19:09:08 +0100377 }
378}
379
380template GSUP_IE tr_GSUP_IE_MSISDN(template hexstring msisdn) := {
381 tag := OSMO_GSUP_MSISDN_IE,
382 len := ?,
383 val := {
Harald Welte3f95be82018-01-27 00:48:13 +0100384 msisdn := tr_GSUP_MSISDN(msisdn)
Harald Welte6ff81902018-01-21 19:09:08 +0100385 }
386}
387
388
Harald Weltedf327232017-12-28 22:51:51 +0100389template (value) GSUP_IE ts_GSUP_IE_Cause(integer cause) := {
390 tag := OSMO_GSUP_CAUSE_IE,
391 len := 0, /* overwritten */
392 val := {
393 cause := cause
394 }
395}
396
397template GSUP_IE tr_GSUP_IE_Cause(template integer cause) := {
398 tag := OSMO_GSUP_CAUSE_IE,
399 len := ?,
400 val := {
401 cause := cause
402 }
403}
404
405template (value) GSUP_IE ts_GSUP_IE_AUTS(octetstring auts) := {
406 tag := OSMO_GSUP_AUTS_IE,
407 len := 0, /* overwritten */
408 val := {
409 auts := auts
410 }
411}
412
413template (value) GSUP_IE ts_GSUP_IE_RAND(octetstring rand) := {
414 tag := OSMO_GSUP_RAND_IE,
415 len := 0, /* overwritten */
416 val := {
417 rand := rand
418 }
419}
420
Harald Welte77a8eba2018-01-22 21:22:32 +0100421template (value) GSUP_IE ts_GSUP_IE_SRES(octetstring sres) := {
422 tag := OSMO_GSUP_SRES_IE,
423 len := 0, /* overwritten */
424 val := {
425 sres := sres
426 }
427}
428
429template (value) GSUP_IE ts_GSUP_IE_Kc(octetstring kc) := {
430 tag := OSMO_GSUP_KC_IE,
431 len := 0, /* overwritten */
432 val := {
433 kc := kc
434 }
435}
436
437template (value) GSUP_IE ts_GSUP_IE_IK(octetstring ik) := {
438 tag := OSMO_GSUP_IK_IE,
439 len := 0, /* overwritten */
440 val := {
441 ik := ik
442 }
443}
444
445template (value) GSUP_IE ts_GSUP_IE_CK(octetstring ck) := {
446 tag := OSMO_GSUP_CK_IE,
447 len := 0, /* overwritten */
448 val := {
449 ck := ck
450 }
451}
452
453template (value) GSUP_IE ts_GSUP_IE_AUTN(octetstring autn) := {
454 tag := OSMO_GSUP_AUTN_IE,
455 len := 0, /* overwritten */
456 val := {
457 autn := autn
458 }
459}
460
461template (value) GSUP_IE ts_GSUP_IE_RES(octetstring res) := {
462 tag := OSMO_GSUP_RES_IE,
463 len := 0, /* overwritten */
464 val := {
465 res := res
466 }
467}
Harald Weltedf327232017-12-28 22:51:51 +0100468
Harald Welteeded9ad2018-02-17 20:57:34 +0100469template (value) GSUP_IE ts_GSUP_IE_APN(octetstring apn) := {
470 tag := OSMO_GSUP_ACCESS_POINT_NAME_IE,
471 len := 0, /* overwritten */
472 val := {
473 apn := apn
474 }
475}
476
Harald Weltedf327232017-12-28 22:51:51 +0100477
478
479} with { encode "RAW"; variant "FIELDORDER(msb)" }