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;
)" }