diff options
author | Harald Welte <laforge@osmocom.org> | 2021-01-14 21:03:14 +0100 |
---|---|---|
committer | Harald Welte <laforge@osmocom.org> | 2021-01-16 22:50:21 +0100 |
commit | dbd5e677cea8f79bb1800b2e705570fb6c5811a3 (patch) | |
tree | 3682f0ba101d6b2d47c694cf08dcd18c5a0cdc17 | |
parent | bf3976185ab486339c7c221350fef5186a945e73 (diff) |
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
-rw-r--r-- | gbproxy/GBProxy_Tests.ttcn | 5 | ||||
-rw-r--r-- | 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; |