ggsn: Append IMEISV IE to CreatePdpCtxReq

Change-Id: I00975328e94afd116e59c88fd96c5b0154810a1e
diff --git a/ggsn_tests/GGSN_Tests.ttcn b/ggsn_tests/GGSN_Tests.ttcn
index e3d9341..c1ef7fb 100644
--- a/ggsn_tests/GGSN_Tests.ttcn
+++ b/ggsn_tests/GGSN_Tests.ttcn
@@ -99,7 +99,8 @@
 		OCT4		teic_remote,
 		OCT1		ratType optional,
 		UserLocationInformation uli optional,
-		OCT2 charging_char optional
+		OCT2 charging_char optional,
+		OCT8 imeisv optional
 	}
 
 	type component GT_CT {
@@ -332,6 +333,11 @@
 		return int2oct(f_rnd_int(4294967296), 4);
 	}
 
+	/* return random IMEI(SV) */
+	function f_rnd_imeisv() return OCT8 {
+		return hex2oct(f_rnd_hexstring(16, 10));
+	}
+
 	/* define an (internal) representation of a PDP context */
 	template PdpContext t_DefinePDP(hexstring imsi, octetstring msisdn, octetstring apn,
 					EndUserAddress eua, OCT1 ratType := '02'O /* GERAN */) := {
@@ -352,7 +358,8 @@
 				geographicLocationCGI := ts_GeographicLocationCGI('262'H, '42F'H, '0001'O, '0002'O)
 			}
 		},
-		charging_char := '0000'O
+		charging_char := '0000'O,
+		imeisv := f_rnd_imeisv()
 	}
 
 	/* send GTP-C for a given context and increment sequence number */
@@ -513,7 +520,7 @@
 		f_send_gtpc(ts_GTPC_CreatePDP(g_peer_c, g_c_seq_nr, ctx.imsi, g_restart_ctr,
 						  ctx.teid, ctx.teic, ctx.nsapi, ctx.eua, ctx.apn,
 						  g_sgsn_ip_c, g_sgsn_ip_u, ctx.msisdn, ctx.pco_req, ctx.ratType,
-						  ctx.uli, ctx.charging_char));
+						  ctx.uli, ctx.charging_char, ctx.imeisv));
 		T_default.start;
 		d := activate(pingpong());
 		if (Gx_PROC.checkstate("Connected")) {
@@ -2009,7 +2016,7 @@
 							  ctx[next_req_ctx].teid, ctx[next_req_ctx].teic, ctx[next_req_ctx].nsapi,
 							  ctx[next_req_ctx].eua, ctx[next_req_ctx].apn,  g_sgsn_ip_c, g_sgsn_ip_u,
 							  ctx[next_req_ctx].msisdn, ctx[next_req_ctx].pco_req, ctx[next_req_ctx].ratType,
-							  ctx[next_req_ctx].uli, ctx[next_req_ctx].charging_char));
+							  ctx[next_req_ctx].uli, ctx[next_req_ctx].charging_char, ctx[next_req_ctx].imeisv));
 			next_req_ctx := next_req_ctx + 1;
 			if (next_req_ctx < num_ctx) {
 				T_next.start;
@@ -2123,7 +2130,7 @@
 									  ctx.teid, ctx.teic, ctx.nsapi,
 									  ctx.eua, ctx.apn,  g_sgsn_ip_c, g_sgsn_ip_u,
 									  ctx.msisdn, ctx.pco_req, ctx.ratType,
-									  ctx.uli, ctx.charging_char));
+									  ctx.uli, ctx.charging_char, ctx.imeisv));
 					next_req_ctx := next_req_ctx + 1;
 				}
 				T_next.start;