laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/32404 )
Change subject: RSL_Types: Add (most) VGCS/VBS related IEs + Messages ......................................................................
RSL_Types: Add (most) VGCS/VBS related IEs + Messages
This will help us to start tests for VGCS/VBS.
Change-Id: I4c4a9ac1bbd5114cb2237ea282d7bace13a52abe --- M library/GSM_Types.ttcn M library/RSL_Types.ttcn 2 files changed, 143 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/04/32404/1
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..fe46ddc 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 (value) GroupCallRef group_call_ref, + template 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 := ts_RslChanNr_PCH_AGCH(0)}), + tr_RSL_IE(RSL_IE_Body:{cmd_indicator := ts_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 (value) 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 := ts_RslChanNr_PCH_AGCH(0)}), + tr_RSL_IE(RSL_IE_Body:{cmd_indicator := ts_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 {