RSL_Types: Add (most) VGCS/VBS related IEs + Messages
This will help us to start tests for VGCS/VBS.
Change-Id: I4c4a9ac1bbd5114cb2237ea282d7bace13a52abe
diff --git a/library/GSM_Types.ttcn b/library/GSM_Types.ttcn
index b234bf4..54c2e98 100644
--- a/library/GSM_Types.ttcn
+++ b/library/GSM_Types.ttcn
@@ -29,6 +29,8 @@
type hexstring GsmMnc length(2 .. 3);
type uint16_t GsmLac;
type uint16_t GsmCellId;
+type octetstring GroupCallRef length(1 .. 5);
+
/* ARFCN with explicit band discrimination */
type record GsmBandArfcn {
diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn
index 0f03c87..ceb6adb 100644
--- a/library/RSL_Types.ttcn
+++ b/library/RSL_Types.ttcn
@@ -4,7 +4,7 @@
*
* RSL is a 3GPP standard protocol used between BTS and BSC in a GSM network.
*
- * (C) 2017 by Harald Welte <laforge@gnumonks.org>
+ * (C) 2017-2023 by Harald Welte <laforge@gnumonks.org>
* All rights reserved.
*
* Released under the terms of GNU General Public License, Version 2 or
@@ -206,7 +206,7 @@
RSL_IE_CBCH_LOAD_INFO ('00101101'B),
RSL_IE_SMSCB_CHAN_INDICATOR ('00101110'B),
RSL_IE_GROUP_CALL_REF ('00101111'B),
- RSL_IE_CHAN_DESC ('00110000'B),
+ RSL_IE_GROUP_CHAN_DESC ('00110000'B),
RSL_IE_NCH_DRX_INFO ('00110001'B),
RSL_IE_CMD_INDICATOR ('00110010'B),
RSL_IE_EMLPP_PRIO ('00110011'B),
@@ -850,6 +850,78 @@
slot_count := slot_count
}
+ /* 9.3.45 Group Call Reference */
+ type record RSL_IE_GroupCallReference {
+ uint8_t len,
+ GroupCallRef group_or_bcast_call_ref
+ } with {
+ variant (len) "LENGTHTO(group_or_bcast_call_ref)"
+ };
+ template (value) RSL_IE_GroupCallReference ts_GroupCallRef(template (value) GroupCallRef gcr) := {
+ len := 0, // overwritten
+ group_or_bcast_call_ref := gcr
+ }
+ template (present) RSL_IE_GroupCallReference tr_GroupCallRef(template (present) GroupCallRef gcr := ?) := {
+ len := ?,
+ group_or_bcast_call_ref := gcr
+ }
+
+ /* 9.3.46 Channel description */
+ type record RSL_IE_GroupChannelDescription {
+ uint8_t len,
+ octetstring chan_desc
+ } with {
+ variant (len) "LENGTHTO(chan_desc)"
+ };
+ template (value) RSL_IE_GroupChannelDescription ts_GroupChanDesc(template (value) octetstring cd) := {
+ len := 0, // overwritten
+ chan_desc := cd
+ }
+ template (present) RSL_IE_GroupChannelDescription tr_GroupChanDesc(template (present) octetstring cd) := {
+ len := ?,
+ chan_desc := cd
+ }
+
+ /* 9.3.47 NCH DRX Information */
+ type record RSL_IE_NchDrxInformation {
+ uint8_t len,
+ BIT2 spare,
+ BIT1 nln_status,
+ BIT3 emlpp_priority,
+ BIT2 nln
+ } with {
+ variant (len) "LENGTHTO(spare,nln_status,emlpp_priority,nln)"
+ };
+
+ /* 9.3.48 Command Indicator */
+ type enumerated RSL_CommandIndicator {
+ CMD_IND_START (0),
+ CMD_IND_STOP (1)
+ } with { variant "FIELDLENGTH(8)" };
+ type record RSL_IE_CommandIndicator {
+ uint8_t len,
+ RSL_CommandIndicator command_value
+ } with {
+ variant (len) "LENGTHTO(command_value)"
+ };
+ template (value) RSL_IE_CommandIndicator ts_CommandInd(template (value) RSL_CommandIndicator ci) := {
+ len := 0, // overwritten
+ command_value := ci
+ }
+ template (present) RSL_IE_CommandIndicator tr_CommandInd(template (present) RSL_CommandIndicator ci) := {
+ len := ?,
+ command_value := ci
+ }
+
+ /* 9.3.50 UIC */
+ type record RSL_IE_Uic {
+ uint8_t len,
+ BIT2 spare,
+ uint6_t uic
+ } with {
+ variant (len) "LENGTHTO(spare,uic)"
+ };
+
/* 9.3.52, 3GPP TS 44.018 10.5.2.21aa */
type record RSL_IE_MultirateCfg {
uint8_t len,
@@ -1086,6 +1158,12 @@
RSL_LV full_imm_ass_info,
MobileIdentityLV ms_identity,
+ RSL_IE_GroupCallReference group_call_ref,
+ RSL_IE_GroupChannelDescription group_chan_desc,
+ RSL_IE_NchDrxInformation nch_drx_info,
+ RSL_IE_CommandIndicator cmd_indicator,
+ RSL_IE_Uic uic,
+
uint16_t ipa_conn_id,
uint16_t ipa_local_port,
uint16_t ipa_remote_port,
@@ -1153,6 +1231,12 @@
ms_identity, iei = RSL_IE_MS_IDENTITY;
other, iei = RSL_IE_FULL_BCCH_INFO;
+ group_call_ref, iei = RSL_IE_GROUP_CALL_REF;
+ group_chan_desc, iei = RSL_IE_GROUP_CHAN_DESC;
+ nch_drx_info, iei = RSL_IE_NCH_DRX_INFO;
+ cmd_indicator, iei = RSL_IE_CMD_INDICATOR;
+ uic, iei = RSL_IE_UIC;
+
ipa_conn_id, iei = RSL_IE_IPAC_CONN_ID;
ipa_remote_ip, iei = RSL_IE_IPAC_REMOTE_IP;
ipa_remote_port, iei = RSL_IE_IPAC_REMOTE_PORT;
@@ -2659,6 +2743,50 @@
}
}
+ template (value) RSL_Message ts_RSL_NOTIF_CMD_START(template (value) GroupCallRef group_call_ref,
+ template (value) octetstring chan_desc) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
+ msg_type := RSL_MT_NOT_CMD,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := ts_RslChanNr_PCH_AGCH(0)}),
+ t_RSL_IE(RSL_IE_CMD_INDICATOR, RSL_IE_Body:{cmd_indicator := ts_CommandInd(CMD_IND_START)}),
+ t_RSL_IE(RSL_IE_GROUP_CALL_REF, RSL_IE_Body:{group_call_ref := ts_GroupCallRef(group_call_ref)}),
+ t_RSL_IE(RSL_IE_GROUP_CHAN_DESC, RSL_IE_Body:{group_chan_desc := ts_GroupChanDesc(chan_desc)})
+ }
+ }
+ template RSL_Message tr_RSL_NOTIF_CMD_START(template (present) GroupCallRef group_call_ref,
+ template (present) octetstring chan_desc := ?) := {
+ msg_disc := tr_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
+ msg_type := RSL_MT_NOT_CMD,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := t_RslChanNr_PCH_AGCH(0)}),
+ tr_RSL_IE(RSL_IE_Body:{cmd_indicator := tr_CommandInd(CMD_IND_START)}),
+ tr_RSL_IE(RSL_IE_Body:{group_call_ref := tr_GroupCallRef(group_call_ref)}),
+ tr_RSL_IE(RSL_IE_Body:{group_chan_desc := tr_GroupChanDesc(chan_desc)}),
+ *
+ }
+ }
+
+ template (value) RSL_Message ts_RSL_NOTIF_CMD_STOP(template (value) GroupCallRef group_call_ref) := {
+ msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
+ msg_type := RSL_MT_NOT_CMD,
+ ies := {
+ t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := ts_RslChanNr_PCH_AGCH(0)}),
+ t_RSL_IE(RSL_IE_CMD_INDICATOR, RSL_IE_Body:{cmd_indicator := ts_CommandInd(CMD_IND_STOP)}),
+ t_RSL_IE(RSL_IE_GROUP_CALL_REF, RSL_IE_Body:{group_call_ref := ts_GroupCallRef(group_call_ref)})
+ }
+ }
+ template RSL_Message tr_RSL_NOTIF_CMD_STOP(template (present) GroupCallRef group_call_ref) := {
+ msg_disc := tr_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
+ msg_type := RSL_MT_NOT_CMD,
+ ies := {
+ tr_RSL_IE(RSL_IE_Body:{chan_nr := t_RslChanNr_PCH_AGCH(0)}),
+ tr_RSL_IE(RSL_IE_Body:{cmd_indicator := tr_CommandInd(CMD_IND_STOP)}),
+ tr_RSL_IE(RSL_IE_Body:{group_call_ref := tr_GroupCallRef(group_call_ref)}),
+ *
+ }
+ }
+
function f_rsl_find_ie(RSL_Message msg, RSL_IE_Type iei, out RSL_IE_Body ret) return boolean {