pcu: Introduce test TC_mo_ping_pong_with_ul_racap
Test sending MS RA capabilities through Packet Resource Request to
update GPRS multislot class.
EGPRS multislot will come in a later commit.
Change-Id: I5026d8b78a3fb82093956b65989d18fa6f6d5424
diff --git a/library/RLCMAC_CSN1_Types.ttcn b/library/RLCMAC_CSN1_Types.ttcn
index 9ceb339..b545368 100644
--- a/library/RLCMAC_CSN1_Types.ttcn
+++ b/library/RLCMAC_CSN1_Types.ttcn
@@ -420,10 +420,9 @@
variant (tlli) "BYTEORDER(first)"
};
- /* 12.30 MS Radio Access Capability 2 (feature bitmask)
- * (value part, see 3GPP TS 24.008, 10.5.5.12a) */
+ /* TS 44.060 sec 12.30 MS Radio Access Capability 2
+ * (for value part, see 3GPP TS 24.008 sec 10.5.5.12a and table 10.5.146) */
type union MSRadioAccCap2 {
- /* TODO: see table 10.5.146/3GPP TS 24.008 */
MSRadioAccessCapabilityV msRadioAccessCapabilityV
};
@@ -676,10 +675,88 @@
}
}
- template (value) RlcmacUlCtrlMsg ts_RlcMacUlCtrl_PKT_RES_REQ(
- GprsTlli tlli, ChannelReqDescription ch_req_desc,
- RlcAccessType acc_type := RLC_ACC_TYPE_TWO_PHASE
- ) := {
+ 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 := {
@@ -687,8 +764,8 @@
acc_type := acc_type,
id_type := '1'B,
id := { tlli := tlli },
- ms_rac2_presence := '0'B,
- ms_rac2 := omit,
+ 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,