From dbd5e677cea8f79bb1800b2e705570fb6c5811a3 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Thu, 14 Jan 2021 21:03:14 +0100 Subject: 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 --- gbproxy/GBProxy_Tests.ttcn | 5 +++-- library/Osmocom_Gb_Types.ttcn | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn index 44b2ac97..6daad531 100644 --- a/gbproxy/GBProxy_Tests.ttcn +++ b/gbproxy/GBProxy_Tests.ttcn @@ -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, diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn index 518d619f..8ca0cd59 100644 --- a/library/Osmocom_Gb_Types.ttcn +++ b/library/Osmocom_Gb_Types.ttcn @@ -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; -- cgit v1.2.3