blob: 0a80593568c0c01a0858e52e0295baa74b121d95 [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
32private function f_rnd_oct(integer len) return octetstring {
33 var integer i;
34 var octetstring res;
35 for (i := 0; i < len; i := i + 1) {
36 res[i] := int2oct(float2int(rnd()*256.0), 1);
37 }
38 return res;
39}
40
41function f_gen_auth_vec_2g() return AuthVector {
42 var AuthVector vec;
43 vec.rand := f_rnd_oct(16);
44 vec.sres := f_rnd_oct(4);
45 vec.kc := f_rnd_oct(8);
46 return vec;
47}
48
Neels Hofmeyr0ecb2e32018-04-30 15:13:55 +020049function f_gen_auth_vec_3g() return AuthVector {
50 var AuthVector vec := f_gen_auth_vec_2g();
51 vec.ik := f_rnd_oct(16);
52 vec.ck := f_rnd_oct(16);
53 vec.autn := f_rnd_oct(16);
54 vec.res := f_rnd_oct(8);
Alexander Couzens387f7f32018-09-04 18:10:59 +020055 vec.auts := f_rnd_oct(14);
Neels Hofmeyr0ecb2e32018-04-30 15:13:55 +020056 return vec;
57}
58
Harald Welte14a0f942018-02-16 20:42:23 +010059/* 3GPP TS 23.003 2.6 */
60type enumerated TlliType {
61 TLLI_LOCAL,
62 TLLI_FOREIGN,
63 TLLI_RANDOM,
64 TLLI_AUXILIARY,
65 TLLI_RESERVED,
66 TLLI_G_RNTI,
67 TLLI_RAND_G_RNTI
68}
69
70/* 3GPP TS 23.003 2.6 */
71function f_gprs_tlli_type(OCT4 tlli) return TlliType {
72 var bitstring tllib := oct2bit(tlli);
73 if (substr(tllib, 0, 2) == '11'B) {
74 return TLLI_LOCAL;
75 } else if (substr(tllib, 0, 2) == '10'B) {
76 return TLLI_FOREIGN;
77 } else if (substr(tllib, 0, 5) == '01111'B) {
78 return TLLI_RANDOM;
79 } else if (substr(tllib, 0, 4) == '0110'B) {
80 return TLLI_RESERVED;
81 } else if (substr(tllib, 0, 3) == '010'B) {
82 return TLLI_RESERVED;
83 } else if (substr(tllib, 0, 4) == '0000'B) {
84 return TLLI_G_RNTI;
85 } else if (substr(tllib, 0, 4) == '0001'B) {
86 return TLLI_RAND_G_RNTI;
87 } else {
88 setverdict(fail, "Unknonw TLLI Type ", tllib);
Daniel Willmanne4ff5372018-07-05 17:35:03 +020089 mtc.stop;
Harald Welte14a0f942018-02-16 20:42:23 +010090 }
91}
92
93function f_gprs_tlli_random() return OCT4 {
94 var OCT4 tlli := f_rnd_octstring(4);
95 return tlli or4b 'c0000000'O;
96}
97
Harald Welte5a4fa042018-02-16 20:59:21 +010098function f_RAI(HEX0_3n mcc, HEX0_3n mnc, OCT2 lac, OCT1 rac) return RoutingAreaIdentificationV {
99 if (lengthof(mnc) == 2) {
100 mnc := mnc & 'F'H;
101 }
102 var RoutingAreaIdentificationV ret := {
103 mccDigit1 := mcc[0],
104 mccDigit2 := mcc[1],
105 mccDigit3 := mcc[2],
106 mncDigit3 := mnc[2],
107 mncDigit1 := mnc[0],
108 mncDigit2 := mnc[1],
109 lac := lac,
110 rac := rac
111 }
112 return ret;
113}
Harald Welte158a7ca2018-02-16 18:11:31 +0100114
Neels Hofmeyr8df7d152018-03-14 19:03:28 +0100115function f_RAI_to_plmn_hexstr(RoutingAreaIdentificationV rai) return hexstring {
116 var hexstring plmn :=
117 rai.mccDigit1
118 & rai.mccDigit2
119 & rai.mccDigit3
Alexander Couzensc7dddbd2019-04-11 19:18:35 +0200120 & rai.mncDigit3
Neels Hofmeyr8df7d152018-03-14 19:03:28 +0100121 & rai.mncDigit1
Alexander Couzensc7dddbd2019-04-11 19:18:35 +0200122 & rai.mncDigit2;
Neels Hofmeyr8df7d152018-03-14 19:03:28 +0100123 return plmn;
124}
Harald Welte158a7ca2018-02-16 18:11:31 +0100125
126}