osmo-ttcn3-hacks/library/L3_Common.ttcn

100 lines
2.3 KiB
Plaintext

/* Common L3 helper functions in TTCN-3
* (C) 2018 Harald Welte <laforge@gnumonks.org>
* contributions by sysmocom - s.f.m.c. GmbH
* All rights reserved.
*
* Released under the terms of GNU General Public License, Version 2 or
* (at your option) any later version.
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
module L3_Common {
import from Osmocom_Types all;
import from General_Types all;
import from MobileL3_GMM_SM_Types all;
type record AuthVector {
OCT16 rand,
OCT4 sres,
OCT8 kc,
OCT16 ik,
OCT16 ck,
OCT16 autn,
OCT8 res,
/* auts is usally calculated from autn + rand on the MS.
* To simplify the test case, auts is generated instead calculated here.
*/
OCT14 auts
}
function f_gen_auth_vec_2g() return AuthVector {
var AuthVector vec;
vec.rand := f_rnd_octstring(16);
vec.sres := f_rnd_octstring(4);
vec.kc := f_rnd_octstring(8);
return vec;
}
function f_gen_auth_vec_3g() return AuthVector {
var AuthVector vec := f_gen_auth_vec_2g();
vec.ik := f_rnd_octstring(16);
vec.ck := f_rnd_octstring(16);
vec.autn := f_rnd_octstring(16);
vec.res := f_rnd_octstring(8);
vec.auts := f_rnd_octstring(14);
return vec;
}
function f_RAI(HEX0_3n mcc, HEX0_3n mnc, OCT2 lac, OCT1 rac) return RoutingAreaIdentificationV {
if (lengthof(mnc) == 2) {
mnc := mnc & 'F'H;
}
var RoutingAreaIdentificationV ret := {
mccDigit1 := mcc[0],
mccDigit2 := mcc[1],
mccDigit3 := mcc[2],
mncDigit3 := mnc[2],
mncDigit1 := mnc[0],
mncDigit2 := mnc[1],
lac := lac,
rac := rac
}
return ret;
}
function f_RAI_to_plmn_hexstr(RoutingAreaIdentificationV rai) return hexstring {
var hexstring plmn :=
rai.mccDigit1
& rai.mccDigit2
& rai.mccDigit3
& rai.mncDigit3
& rai.mncDigit1
& rai.mncDigit2;
return plmn;
}
private function f_concat_pad(integer tot_len, hexstring prefix, integer suffix) return hexstring {
var integer suffix_len := tot_len - lengthof(prefix);
var charstring suffix_ch := int2str(suffix);
var integer pad_len := suffix_len - lengthof(suffix_ch);
return prefix & int2hex(0, pad_len) & str2hex(suffix_ch);
}
function f_gen_imei(integer suffix) return hexstring {
return f_concat_pad(14, '49999'H, suffix);
}
function f_gen_imsi(integer suffix) return hexstring {
return f_concat_pad(15, '26242'H, suffix);
}
function f_gen_msisdn(integer suffix) return hexstring {
return f_concat_pad(12, '49123'H, suffix);
}
}