blob: a7c2eb2256f5d177fbf53d8f0ee2af3a51d11575 [file] [log] [blame]
Harald Welte158a7ca2018-02-16 18:11:31 +01001module L3_Common {
2
3import from Osmocom_Types all;
4import from General_Types all;
5
6type record AuthVector {
7 OCT16 rand,
8 OCT4 sres,
9 OCT8 kc
10 /* FIXME: 3G elements */
11}
12
13private function f_rnd_oct(integer len) return octetstring {
14 var integer i;
15 var octetstring res;
16 for (i := 0; i < len; i := i + 1) {
17 res[i] := int2oct(float2int(rnd()*256.0), 1);
18 }
19 return res;
20}
21
22function f_gen_auth_vec_2g() return AuthVector {
23 var AuthVector vec;
24 vec.rand := f_rnd_oct(16);
25 vec.sres := f_rnd_oct(4);
26 vec.kc := f_rnd_oct(8);
27 return vec;
28}
29
Harald Welte14a0f942018-02-16 20:42:23 +010030/* 3GPP TS 23.003 2.6 */
31type enumerated TlliType {
32 TLLI_LOCAL,
33 TLLI_FOREIGN,
34 TLLI_RANDOM,
35 TLLI_AUXILIARY,
36 TLLI_RESERVED,
37 TLLI_G_RNTI,
38 TLLI_RAND_G_RNTI
39}
40
41/* 3GPP TS 23.003 2.6 */
42function f_gprs_tlli_type(OCT4 tlli) return TlliType {
43 var bitstring tllib := oct2bit(tlli);
44 if (substr(tllib, 0, 2) == '11'B) {
45 return TLLI_LOCAL;
46 } else if (substr(tllib, 0, 2) == '10'B) {
47 return TLLI_FOREIGN;
48 } else if (substr(tllib, 0, 5) == '01111'B) {
49 return TLLI_RANDOM;
50 } else if (substr(tllib, 0, 4) == '0110'B) {
51 return TLLI_RESERVED;
52 } else if (substr(tllib, 0, 3) == '010'B) {
53 return TLLI_RESERVED;
54 } else if (substr(tllib, 0, 4) == '0000'B) {
55 return TLLI_G_RNTI;
56 } else if (substr(tllib, 0, 4) == '0001'B) {
57 return TLLI_RAND_G_RNTI;
58 } else {
59 setverdict(fail, "Unknonw TLLI Type ", tllib);
60 self.stop;
61 }
62}
63
64function f_gprs_tlli_random() return OCT4 {
65 var OCT4 tlli := f_rnd_octstring(4);
66 return tlli or4b 'c0000000'O;
67}
68
Harald Welte158a7ca2018-02-16 18:11:31 +010069
70
71}