GSM_RR_Types: Add support for VBS/VGCS related L3 RR messages

This adds support for the VBS/VGCS related L3 RR messages to
GsmRrL3Union/GsmRrL3Message.  Only those with proper L3 header
and classic "tabular" syntax are supported so far, no CSN.1 messages
with short L2 header for SACCH.

Change-Id: I79ca7ee2b94bb370cd7162cfd9db436049998041
diff --git a/library/GSM_RR_Types.ttcn b/library/GSM_RR_Types.ttcn
index d41e035..464d060 100644
--- a/library/GSM_RR_Types.ttcn
+++ b/library/GSM_RR_Types.ttcn
@@ -83,8 +83,16 @@
 		EXTENDED_MEASUREMENT_REPORT	('00110110'B),
 		EXTENDED_MEASUREMENT_ORDER	('00110111'B),
 		GPRS_SUSPENSION_REQUEST		('00110100'B),
-		//MBMS_ANNOUNCEMENT		('00010110'B), duplicate?
-		//SERVICE_INFORMATION		('00110110'B), duplicate?
+		//MBMS_ANNOUNCEMENT		('00010110'B), duplicate, DL only
+		//SERVICE_INFORMATION		('00110110'B), duplicate, DL only
+
+		VGCS_UPLINK_GRANT		('00001001'B),
+		UPLINK_RELEASE			('00001110'B),
+		UPLINK_BUSY			('00101010'B),
+		TALKER_INDICATION		('00010001'B),
+		PRIORITY_UPLINK_REQUEST		('01100110'B),
+		DATA_INDICATION			('01100111'B),
+		DATA_INDICATION2		('01101000'B),
 
 		APPLICATION_INFORMATION		('00111000'B),
 
@@ -111,8 +119,8 @@
 		CDMA2000_CLASSMARK_CHANGE	('01100010'B),
 		INTERSYS_TO_UTRAN_HO_CMD	('01100011'B),
 		INTERSYS_TO_CDMA2000_HO_CMD	('01100100'B),
-		GERAN_IU_MODE_CLASSMARK_CHG	('01100101'B),
-		INTERSYS_TO_EUTRAN_HO_CMD	('01100110'B)
+		GERAN_IU_MODE_CLASSMARK_CHG	('01100101'B)
+		//INTERSYS_TO_EUTRAN_HO_CMD	('01100110'B) duplicate, DL only
 	} with { variant "FIELDLENGTH(8)" };
 
 	/* Table 10.4.2 of Section 10.4 / 3GPP TS 44.018 */
@@ -577,6 +585,92 @@
 		RestOctets			rest_octets
 	} with { variant "" };
 
+	/* 9.1.44 */
+	type record CipheringKeySeqNrTV {
+		HEX1			tag,
+		CipheringKeySeqNr	cksn
+	}
+	type record TalkerIndication {
+		MsClassmark2LV		cm2,
+		MobileIdentityLV	mi,
+		CipheringKeySeqNrTV	cksn optional
+	} with { variant "TAG(cksn, tag = 'B'H)" };
+
+	/* 9.1.44a */
+	type record PriorityUplinkRequest {
+		OCT1			est_cause,
+		OCT4			token,
+		OCT4			reduced_gcr,
+		MobileIdentityLV	mi
+	} with { variant "" };
+
+	/* 9.1.44b */
+	type record DataIndication {
+		GsmTmsi			tmsi,
+		OCT9			app_data,
+		OCT1			data_id
+	} with { variant "" };
+
+	/* 9.1.44c */
+	type record DataIndication2 {
+		GsmTmsi			tmsi,
+		OCT4			reduced_gcr,
+		OCT9			app_data,
+		OCT1			data_id
+	} with { variant "" };
+
+	/* 9.1.46 */
+	type record UplinkBusy {
+		TalkerPrioEmergIndTLV	prio optional,
+		TokenTV			token optional,
+		TalkerIdentityTLV	talker_id optional,
+		UplinkAccessIndTV	ul_access_ind optional
+	} with { variant "" };
+
+	/* 9.1.48 */
+	type record UplinkRelease {
+		RR_Cause		cause
+	} with { variant "" };
+
+	/* 9.1.49 */
+	type record VgcsUplinkGrant {
+		RequestReference	req_ref,
+		TimingAdvance		ta
+	} with { variant "" };
+
+
+	/* 10.5.2.64 */
+	type record TalkerPrioEmergIndTLV {
+		OCT1			iei ('31'O),
+		uint8_t			len,
+		boolean			es,
+		BIT3			spare,
+		boolean			uai_rach,
+		uint3_t			priority
+	} with { variant (len) "LENGTHTO(es,spare,uai_rach,priority)"
+	         variant "PRESENCE(iei = '31'O)" };
+
+	/* 10.5.2.65 */
+	type record TokenTV {
+		OCT1			iei ('32'O),
+		OCT4			token
+	} with { variant "PRESENCE(iei = '32'O)" };
+
+	/* 10.5.2.66 */
+	type record TalkerIdentityTLV {
+		OCT1			iei ('33'O),
+		uint8_t			len,
+		octetstring		talker_id
+	} with { variant (len) "LENGTHTO(talker_id)"
+		 variant "PRESENCE(iei = '33'O)" };
+
+	/* 10.5.2.74 */
+	type record UplinkAccessIndTV {
+		HEX1			iei ('8'H),
+		BIT3			spare ('000'B),
+		boolean			uai_rach
+	} with { variant "PRESENCE(iei = '8'H)" };
+
 	type union RrUnion {
 /*
 		SystemInformationType1		si1,
@@ -648,6 +742,13 @@
 		MeasurementReport	meas_rep,
 		AssignmentCommand	ass_cmd,
 		HandoverCommand		ho_cmd,
+		TalkerIndication	talker_ind,
+		PriorityUplinkRequest	priority_ul_req,
+		UplinkBusy		uplink_busy,
+		UplinkRelease		uplink_release,
+		VgcsUplinkGrant		vgcs_ul_grant,
+		DataIndication		data_ind,
+		DataIndication2		data_ind2,
 		octetstring		other
 	};
 
@@ -659,6 +760,13 @@
 				meas_rep, header.message_type = MEASUREMENT_REPORT;
 				ass_cmd, header.message_type = ASSIGNMENT_COMMAND;
 				ho_cmd, header.message_type = HANDOVER_COMMAND;
+				talker_ind, header.message_type = TALKER_INDICATION;
+				priority_ul_req, header.message_type = PRIORITY_UPLINK_REQUEST;
+				uplink_busy, header.message_type = UPLINK_BUSY;
+				uplink_release, header.message_type = UPLINK_RELEASE;
+				vgcs_ul_grant, header.message_type = VGCS_UPLINK_GRANT;
+				data_ind, header.message_type = DATA_INDICATION;
+				data_ind2, header.message_type = DATA_INDICATION2;
 				other, OTHERWISE;
 		)" }