blob: a2c27bfcf31c57262d9c6ac5026a89f84b9dcb4c [file] [log] [blame]
Harald Welte34b5a952019-05-27 11:54:11 +02001/* Common L3 helper functions in TTCN-3
2 * (C) 2018 Harald Welte <laforge@gnumonks.org>
3 * contributions by sysmocom - s.f.m.c. GmbH
4 * All rights reserved.
5 *
6 * Released under the terms of GNU General Public License, Version 2 or
7 * (at your option) any later version.
8 *
9 * SPDX-License-Identifier: GPL-2.0-or-later
10 */
11
Harald Welte158a7ca2018-02-16 18:11:31 +010012module L3_Common {
13
14import from Osmocom_Types all;
15import from General_Types all;
Harald Welte5a4fa042018-02-16 20:59:21 +010016import from MobileL3_GMM_SM_Types all;
Harald Welte158a7ca2018-02-16 18:11:31 +010017
18type record AuthVector {
19 OCT16 rand,
20 OCT4 sres,
Neels Hofmeyr0ecb2e32018-04-30 15:13:55 +020021 OCT8 kc,
22 OCT16 ik,
23 OCT16 ck,
24 OCT16 autn,
Alexander Couzens387f7f32018-09-04 18:10:59 +020025 OCT8 res,
26 /* auts is usally calculated from autn + rand on the MS.
27 * To simplify the test case, auts is generated instead calculated here.
28 */
29 OCT14 auts
Harald Welte158a7ca2018-02-16 18:11:31 +010030}
31
Harald Welte158a7ca2018-02-16 18:11:31 +010032function f_gen_auth_vec_2g() return AuthVector {
33 var AuthVector vec;
Vadim Yanitskiy6b295712020-11-04 11:15:55 +070034 vec.rand := f_rnd_octstring(16);
35 vec.sres := f_rnd_octstring(4);
36 vec.kc := f_rnd_octstring(8);
Harald Welte158a7ca2018-02-16 18:11:31 +010037 return vec;
38}
39
Neels Hofmeyr0ecb2e32018-04-30 15:13:55 +020040function f_gen_auth_vec_3g() return AuthVector {
41 var AuthVector vec := f_gen_auth_vec_2g();
Vadim Yanitskiy6b295712020-11-04 11:15:55 +070042 vec.ik := f_rnd_octstring(16);
43 vec.ck := f_rnd_octstring(16);
44 vec.autn := f_rnd_octstring(16);
45 vec.res := f_rnd_octstring(8);
46 vec.auts := f_rnd_octstring(14);
Neels Hofmeyr0ecb2e32018-04-30 15:13:55 +020047 return vec;
48}
49
Harald Welte5a4fa042018-02-16 20:59:21 +010050function f_RAI(HEX0_3n mcc, HEX0_3n mnc, OCT2 lac, OCT1 rac) return RoutingAreaIdentificationV {
51 if (lengthof(mnc) == 2) {
52 mnc := mnc & 'F'H;
53 }
54 var RoutingAreaIdentificationV ret := {
55 mccDigit1 := mcc[0],
56 mccDigit2 := mcc[1],
57 mccDigit3 := mcc[2],
58 mncDigit3 := mnc[2],
59 mncDigit1 := mnc[0],
60 mncDigit2 := mnc[1],
61 lac := lac,
62 rac := rac
63 }
64 return ret;
65}
Harald Welte158a7ca2018-02-16 18:11:31 +010066
Neels Hofmeyr8df7d152018-03-14 19:03:28 +010067function f_RAI_to_plmn_hexstr(RoutingAreaIdentificationV rai) return hexstring {
68 var hexstring plmn :=
69 rai.mccDigit1
70 & rai.mccDigit2
71 & rai.mccDigit3
Alexander Couzensc7dddbd2019-04-11 19:18:35 +020072 & rai.mncDigit3
Neels Hofmeyr8df7d152018-03-14 19:03:28 +010073 & rai.mncDigit1
Alexander Couzensc7dddbd2019-04-11 19:18:35 +020074 & rai.mncDigit2;
Neels Hofmeyr8df7d152018-03-14 19:03:28 +010075 return plmn;
76}
Harald Welte158a7ca2018-02-16 18:11:31 +010077
78}