blob: 19e52ebb543ccc3a3b26a7108501afb85d606365 [file] [log] [blame]
Harald Welte158a7ca2018-02-16 18:11:31 +01001module L3_Common {
2
3import from Osmocom_Types all;
4import from General_Types all;
Harald Welte5a4fa042018-02-16 20:59:21 +01005import from MobileL3_GMM_SM_Types all;
Harald Welte158a7ca2018-02-16 18:11:31 +01006
7type record AuthVector {
8 OCT16 rand,
9 OCT4 sres,
10 OCT8 kc
11 /* FIXME: 3G elements */
12}
13
14private function f_rnd_oct(integer len) return octetstring {
15 var integer i;
16 var octetstring res;
17 for (i := 0; i < len; i := i + 1) {
18 res[i] := int2oct(float2int(rnd()*256.0), 1);
19 }
20 return res;
21}
22
23function f_gen_auth_vec_2g() return AuthVector {
24 var AuthVector vec;
25 vec.rand := f_rnd_oct(16);
26 vec.sres := f_rnd_oct(4);
27 vec.kc := f_rnd_oct(8);
28 return vec;
29}
30
Harald Welte14a0f942018-02-16 20:42:23 +010031/* 3GPP TS 23.003 2.6 */
32type enumerated TlliType {
33 TLLI_LOCAL,
34 TLLI_FOREIGN,
35 TLLI_RANDOM,
36 TLLI_AUXILIARY,
37 TLLI_RESERVED,
38 TLLI_G_RNTI,
39 TLLI_RAND_G_RNTI
40}
41
42/* 3GPP TS 23.003 2.6 */
43function f_gprs_tlli_type(OCT4 tlli) return TlliType {
44 var bitstring tllib := oct2bit(tlli);
45 if (substr(tllib, 0, 2) == '11'B) {
46 return TLLI_LOCAL;
47 } else if (substr(tllib, 0, 2) == '10'B) {
48 return TLLI_FOREIGN;
49 } else if (substr(tllib, 0, 5) == '01111'B) {
50 return TLLI_RANDOM;
51 } else if (substr(tllib, 0, 4) == '0110'B) {
52 return TLLI_RESERVED;
53 } else if (substr(tllib, 0, 3) == '010'B) {
54 return TLLI_RESERVED;
55 } else if (substr(tllib, 0, 4) == '0000'B) {
56 return TLLI_G_RNTI;
57 } else if (substr(tllib, 0, 4) == '0001'B) {
58 return TLLI_RAND_G_RNTI;
59 } else {
60 setverdict(fail, "Unknonw TLLI Type ", tllib);
61 self.stop;
62 }
63}
64
65function f_gprs_tlli_random() return OCT4 {
66 var OCT4 tlli := f_rnd_octstring(4);
67 return tlli or4b 'c0000000'O;
68}
69
Harald Welte5a4fa042018-02-16 20:59:21 +010070function f_RAI(HEX0_3n mcc, HEX0_3n mnc, OCT2 lac, OCT1 rac) return RoutingAreaIdentificationV {
71 if (lengthof(mnc) == 2) {
72 mnc := mnc & 'F'H;
73 }
74 var RoutingAreaIdentificationV ret := {
75 mccDigit1 := mcc[0],
76 mccDigit2 := mcc[1],
77 mccDigit3 := mcc[2],
78 mncDigit3 := mnc[2],
79 mncDigit1 := mnc[0],
80 mncDigit2 := mnc[1],
81 lac := lac,
82 rac := rac
83 }
84 return ret;
85}
Harald Welte158a7ca2018-02-16 18:11:31 +010086
87
88}