ggsn: Append MS TimeZone IE to CreatePDPCtxReq

TS 29.060 states that it shall be included for primary PDP context
activation if the information is available, so let's add it by default.

Change-Id: I8c7e491a07cadfe09403504a82d34e412673a531
diff --git a/library/GTP_Templates.ttcn b/library/GTP_Templates.ttcn
index 22d8632..493da8f 100644
--- a/library/GTP_Templates.ttcn
+++ b/library/GTP_Templates.ttcn
@@ -139,6 +139,42 @@
 		imeisv := imeisv
 	}
 
+	// MS Time Zone  -  7.7.52
+	template (value) MS_TimeZone ts_MS_TimeZone(template (value) OCT1 timeZone := '00'O,
+						    template (value) BIT2 daylightSavingTime := '00'B) := {
+		type_gtpc := '99'O,
+		lengthf := 2,
+		timeZone := timeZone,
+		daylightSavingTime := daylightSavingTime,
+		spare1 := '000'B,
+		sgsnAttempsToUpdateMS := '0'B, /* propietary, use it as spare */
+		spare2 := '00'B
+	}
+	function f_ts_MS_TimeZone(template (omit) OCT1 timeZone, template (omit) BIT2 daylightSavingTime)
+	return template (omit) MS_TimeZone {
+		if (istemplatekind(timeZone, "omit") and istemplatekind(daylightSavingTime, "omit")) {
+			return omit;
+		}
+		if (istemplatekind(timeZone, "omit")) {
+			return ts_MS_TimeZone(daylightSavingTime := daylightSavingTime);
+		}
+		if (istemplatekind(daylightSavingTime, "omit")) {
+			return ts_MS_TimeZone(timeZone);
+		}
+		return ts_MS_TimeZone(timeZone, daylightSavingTime);
+	}
+
+	template (present) MS_TimeZone tr_MS_TimeZone(template (present) OCT1 timeZone := ?,
+						      template (present) BIT2 daylightSavingTime := ?) := {
+		type_gtpc := '99'O,
+		lengthf := 2,
+		timeZone := timeZone,
+		daylightSavingTime := daylightSavingTime,
+		spare1 := '000'B,
+		sgsnAttempsToUpdateMS := '0'B, /* propietary, use it as spare */
+		spare2 := '00'B
+	}
+
 	/* Charging Characteristics IE TS 29.060 7.7.23 */
 	template ChargingCharacteristics_GTPC ts_ChargingCharacteristics(template (value) OCT2 chargingChar) := {
 		type_gtpc := '1A'O,
@@ -400,7 +436,8 @@
 					   template (omit) OCT1 ratType := omit,
 					   template (omit) UserLocationInformation uli := omit,
 					   template (omit) OCT2 charging_char := omit,
-					   template (omit) OCT8 imeisv := omit) := {
+					   template (omit) OCT8 imeisv := omit,
+					   template(omit) MS_TimeZone ms_tz := omit) := {
 		createPDPContextRequest := {
 			imsi := ts_Imsi(imsi),
 			rai := omit,
@@ -441,7 +478,7 @@
 			aPN_Restriction := omit,
 			ratType := f_ts_RATType(ratType),
 			userLocationInformation := uli,
-			mS_TimeZone := omit,
+			mS_TimeZone := ms_tz,
 			imeisv := f_ts_IMEISV(imeisv),
 			camelChargingInformationContainer := omit,
 			additionalTraceInfo := omit,
@@ -465,13 +502,14 @@
 						 template (omit) OCT1 ratType := omit,
 						 template (omit) UserLocationInformation uli := omit,
 						 template (omit) OCT2 charging_char := omit,
-						 template (omit) OCT8 imeisv := omit) := {
+						 template (omit) OCT8 imeisv := omit,
+						 template(omit) MS_TimeZone ms_tz := omit) := {
 		peer := peer,
 		gtpc := ts_GTP1C_PDU(createPDPContextRequest, '00000000'O,
 					valueof(ts_CreatePdpPDU(imsi, restart_ctr, teid_data, teid_ctrl,
 								nsapi, eua, apn, sgsn_ip_sign,
 								sgsn_ip_data, msisdn, pco, ratType, uli,
-								charging_char, imeisv)), seq)
+								charging_char, imeisv, ms_tz)), seq)
 	}