aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2021-01-14 21:03:14 +0100
committerHarald Welte <laforge@osmocom.org>2021-01-16 22:50:21 +0100
commitdbd5e677cea8f79bb1800b2e705570fb6c5811a3 (patch)
tree3682f0ba101d6b2d47c694cf08dcd18c5a0cdc17
parentbf3976185ab486339c7c221350fef5186a945e73 (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.ttcn5
-rw-r--r--library/Osmocom_Gb_Types.ttcn19
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;