164 lines
5.0 KiB
Plaintext
164 lines
5.0 KiB
Plaintext
/* GPRS RLC/MAC Control Messages as per 3GPP TS 44.060 manually transcribed from the CSN.1 syntax, as no CSN.1
|
|
* tool for Eclipse TITAN could be found. Implements only the minimum necessary messages for Osmocom teseting
|
|
* purposes. */
|
|
|
|
/* (C) 2017-2018 Harald Welte <laforge@gnumonks.org>
|
|
* contributions by sysmocom - s.f.m.c. GmbH
|
|
* All rights reserved.
|
|
*
|
|
* Released under the terms of GNU General Public License, Version 2 or
|
|
* (at your option) any later version.
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
module RLCMAC_CSN1_Templates {
|
|
import from General_Types all;
|
|
import from Osmocom_Types all;
|
|
import from GSM_Types all;
|
|
import from MobileL3_GMM_SM_Types all;
|
|
import from RLCMAC_CSN1_Types all;
|
|
|
|
template (value) RlcmacUlCtrlMsg ts_RlcMacUlCtrl_PKT_CTRL_ACK(GprsTlli tlli,
|
|
CtrlAck ack := MS_RCVD_TWO_RLC_SAME_RTI_DIFF_RBSN) := {
|
|
msg_type := PACKET_CONTROL_ACK,
|
|
u := {
|
|
ctrl_ack := {
|
|
tlli := tlli,
|
|
ctrl_ack := ack
|
|
}
|
|
}
|
|
}
|
|
|
|
const ILevel iNone := {
|
|
presence := '0'B,
|
|
i_level := omit
|
|
}
|
|
const ChannelQualityReport c_ChQualRep_default := {
|
|
c_value := 0,
|
|
rxqual := 0,
|
|
sign_var := 0,
|
|
i_levels := { iNone, iNone, iNone, iNone, iNone, iNone, iNone, iNone }
|
|
}
|
|
template (value) RlcmacUlCtrlMsg ts_RlcMacUlCtrl_PKT_DL_ACK(uint5_t dl_tfi,
|
|
AckNackDescription andesc,
|
|
ChannelQualityReport qual_rep := c_ChQualRep_default) := {
|
|
msg_type := PACKET_DL_ACK_NACK,
|
|
u := {
|
|
dl_ack_nack := {
|
|
dl_tfi := dl_tfi,
|
|
ack_nack_desc := andesc,
|
|
chreq_desc_presence := '0'B,
|
|
chreq_desc := omit,
|
|
ch_qual_rep := qual_rep
|
|
}
|
|
}
|
|
}
|
|
|
|
private function f_presence_bit_MultislotCap_GPRS(template (omit) MultislotCap_GPRS mscap_gprs) return BIT1 {
|
|
if (istemplatekind(mscap_gprs, "omit")) {
|
|
return '0'B;
|
|
}
|
|
return '1'B;
|
|
}
|
|
private function f_presence_bit_MultislotCap_EGPRS(template (omit) MultislotCap_EGPRS mscap_egprs) return BIT1 {
|
|
if (istemplatekind(mscap_egprs, "omit")) {
|
|
return '0'B;
|
|
}
|
|
return '1'B;
|
|
}
|
|
template (value) MSRACapabilityValuesRecord ts_RaCapRec(BIT4 att := '0001'B /* E-GSM */, template (omit) MultislotCap_GPRS mscap_gprs := omit, template (omit) MultislotCap_EGPRS mscap_egprs := omit) := {
|
|
mSRACapabilityValues := {
|
|
mSRACapabilityValuesExclude1111 := {
|
|
accessTechnType := att, /* E-GSM */
|
|
accessCapabilities := {
|
|
lengthIndicator := 0, /* overwritten */
|
|
accessCapabilities := {
|
|
rfPowerCapability := '001'B, /* FIXME */
|
|
presenceBitA5 := '0'B,
|
|
a5bits := omit,
|
|
esind := '1'B,
|
|
psbit := '0'B,
|
|
vgcs := '0'B,
|
|
vbs := '0'B,
|
|
presenceBitMultislot := '1'B,
|
|
multislotcap := {
|
|
presenceBitHscsd := '0'B,
|
|
hscsdmultislotclass := omit,
|
|
presenceBitGprs := f_presence_bit_MultislotCap_GPRS(mscap_gprs),
|
|
gprsmultislot := mscap_gprs,
|
|
presenceBitSms := '0'B,
|
|
multislotCap_SMS := omit,
|
|
multislotCapAdditionsAfterRel97 := {
|
|
presenceBitEcsdmulti := '0'B,
|
|
ecsdmultislotclass := omit,
|
|
presenceBitEgprsmulti := f_presence_bit_MultislotCap_EGPRS(mscap_egprs),
|
|
multislotCap_EGPRS := mscap_egprs,
|
|
presenceBitDtmGprsmulti := '0'B,
|
|
multislotCapdtmgprsmultislotsubclass := omit
|
|
}
|
|
},
|
|
accessCapAdditionsAfterRel97 := omit
|
|
},
|
|
spare_bits := omit
|
|
}
|
|
}
|
|
},
|
|
presenceBitMSRACap := '0'B
|
|
};
|
|
|
|
private function f_presence_bit_MSRadioAccessCapabilityV(template (omit) MSRadioAccessCapabilityV ms_rac) return BIT1 {
|
|
if (istemplatekind(ms_rac, "omit")) {
|
|
return '0'B;
|
|
}
|
|
return '1'B;
|
|
}
|
|
|
|
private function f_template_MSRadioAccessCapabilityV_to_MSRadioAccCap2(template (omit) MSRadioAccessCapabilityV ms_rac) return template (omit) MSRadioAccCap2 {
|
|
var template (omit) MSRadioAccCap2 ms_rac2 := omit;
|
|
if (istemplatekind(ms_rac, "omit")) {
|
|
return ms_rac2;
|
|
}
|
|
ms_rac2 := { msRadioAccessCapabilityV := ms_rac };
|
|
return ms_rac2;
|
|
}
|
|
|
|
private const ChannelReqDescription c_ChReqDesc_default := {
|
|
peak_tput_class := 0,
|
|
priority := 0,
|
|
rlc_mode := RLC_MODE_UNACKNOWLEDGED,
|
|
llc_pdu_type := LLC_PDU_IS_NOT_SACK_OR_ACK,
|
|
RlcOctetCount := 0
|
|
}
|
|
|
|
/* TS 44.060 sec 11.2.16 */
|
|
template (value) RlcmacUlCtrlMsg ts_RlcMacUlCtrl_PKT_RES_REQ(GprsTlli tlli,
|
|
template (omit) MSRadioAccessCapabilityV ms_rac,
|
|
ChannelReqDescription ch_req_desc := c_ChReqDesc_default,
|
|
RlcAccessType acc_type := RLC_ACC_TYPE_TWO_PHASE)
|
|
:= {
|
|
msg_type := PACKET_RESOURCE_REQUEST,
|
|
u := {
|
|
resource_req := {
|
|
acc_type_presence := '1'B,
|
|
acc_type := acc_type,
|
|
id_type := '1'B,
|
|
id := { tlli := tlli },
|
|
ms_rac2_presence := f_presence_bit_MSRadioAccessCapabilityV(ms_rac),
|
|
ms_rac2 := f_template_MSRadioAccessCapabilityV_to_MSRadioAccCap2(ms_rac),
|
|
ch_req_desc := ch_req_desc,
|
|
change_mark_presence := '0'B,
|
|
change_mark := omit,
|
|
C_val := '000000'B,
|
|
sign_var_presence := '0'B,
|
|
sign_var := omit,
|
|
I_levels := {
|
|
iNone, iNone, iNone, iNone,
|
|
iNone, iNone, iNone, iNone
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
} with { encode "RAW"; variant "FIELDORDER(msb)" variant "BYTEORDER(last)" };
|