gbproxy: Move away from random TLLI

We used to generate a random TLLI for each ConnHldr.  Instead, use a
deterministic function to generate the P-TMSI (just like we do for the
IMSI) and derive a local TLLI from that P-TMSI.

Related: OS#4472, SYS#5002
Change-Id: Ic1eaa1d298fe998ca97432769953bfc5a5333ae4
This commit is contained in:
Harald Welte 2021-01-14 21:03:14 +01:00
parent bf3976185a
commit dbd5e677ce
2 changed files with 22 additions and 2 deletions

View File

@ -597,14 +597,15 @@ function f_start_handler(void_fn fn, charstring id, GbInstances pcu, GbInstances
float t_guard := 30.0)
runs on test_CT return BSSGP_ConnHdlr {
var BSSGP_ConnHdlr vc_conn;
var OCT4 p_tmsi := f_gen_tmsi(imsi_suffix);
var BSSGP_ConnHdlrPars pars := {
imei := f_gen_imei(imsi_suffix),
imsi := f_gen_imsi(imsi_suffix),
msisdn := f_gen_msisdn(imsi_suffix),
p_tmsi := omit,
p_tmsi := p_tmsi,
p_tmsi_sig := omit,
tlli := f_gprs_tlli_random(),
tlli := f_gprs_tlli_from_tmsi(p_tmsi, TLLI_LOCAL),
tlli_old := omit,
ra := omit,
pcu := g_pcu,

View File

@ -3252,6 +3252,25 @@ octetstring sdu) := {
}
}
/* build a TLLI of specified type from the given (P)TMSI */
function f_gprs_tlli_from_tmsi(OCT4 tmsi, TlliType tlli_type) return OCT4 {
var bitstring tmsi_bits := oct2bit(tmsi);
var bitstring prefix;
select (tlli_type) {
case (TLLI_LOCAL) { prefix := '11'B }
case (TLLI_FOREIGN) { prefix := '01111'B }
case (TLLI_RANDOM) { prefix := '0110'B }
case (TLLI_RESERVED) { prefix := '010'B }
case (TLLI_G_RNTI) { prefix := '0000'B }
case (TLLI_RAND_G_RNTI) { prefix := '0001'B }
case else {
setverdict(fail, "Unknonw TLLI Type ", tlli_type);
mtc.stop;
}
}
return bit2oct(prefix & substr(tmsi_bits, lengthof(prefix), 32-lengthof(prefix)));
}
function f_gprs_tlli_random() return OCT4 {
var OCT4 tlli := f_rnd_octstring(4);
return tlli or4b 'c0000000'O;