sgsn: Use random TLLI when performing ATTACH

Change-Id: If104add9a6d029b674e46e01af71f2e336aa35f0
diff --git a/library/L3_Common.ttcn b/library/L3_Common.ttcn
index 69ab51d..a7c2eb2 100644
--- a/library/L3_Common.ttcn
+++ b/library/L3_Common.ttcn
@@ -27,6 +27,45 @@
 	return vec;
 }
 
+/* 3GPP TS 23.003 2.6 */
+type enumerated TlliType {
+	TLLI_LOCAL,
+	TLLI_FOREIGN,
+	TLLI_RANDOM,
+	TLLI_AUXILIARY,
+	TLLI_RESERVED,
+	TLLI_G_RNTI,
+	TLLI_RAND_G_RNTI
+}
+
+/* 3GPP TS 23.003 2.6 */
+function f_gprs_tlli_type(OCT4 tlli) return TlliType {
+	var bitstring tllib := oct2bit(tlli);
+	if (substr(tllib, 0, 2) == '11'B) {
+		return TLLI_LOCAL;
+	} else if (substr(tllib, 0, 2) == '10'B) {
+		return TLLI_FOREIGN;
+	} else if (substr(tllib, 0, 5) == '01111'B) {
+		return TLLI_RANDOM;
+	} else if (substr(tllib, 0, 4) == '0110'B) {
+		return TLLI_RESERVED;
+	} else if (substr(tllib, 0, 3) == '010'B) {
+		return TLLI_RESERVED;
+	} else if (substr(tllib, 0, 4) == '0000'B) {
+		return TLLI_G_RNTI;
+	} else if (substr(tllib, 0, 4) == '0001'B) {
+		return TLLI_RAND_G_RNTI;
+	} else {
+		setverdict(fail, "Unknonw TLLI Type ", tllib);
+		self.stop;
+	}
+}
+
+function f_gprs_tlli_random() return OCT4 {
+	var OCT4 tlli := f_rnd_octstring(4);
+	return tlli or4b 'c0000000'O;
+}
+
 
 
 }
diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn
index c47403e..cf354a7 100644
--- a/sgsn/SGSN_Tests.ttcn
+++ b/sgsn/SGSN_Tests.ttcn
@@ -149,7 +149,7 @@
 		imsi := f_gen_imsi(imsi_suffix),
 		msisdn := f_gen_msisdn(imsi_suffix),
 		p_tmsi := omit,
-		tlli := 'FFFFFFFF'O,
+		tlli := f_gprs_tlli_random(),
 		ra := omit,
 		bssgp_cell_id := gb.cfg.cell_id,
 		vec := omit,