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;
+}
+
 
 
 }