From dc9666ff9c33b4c0cfa88bc44e42a9e43d995f47 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Wed, 18 Mar 2020 20:30:16 +0100 Subject: [PATCH] pcu: Verify CodingScheme of received data blocks Change-Id: I0a5247650548f8a03f7b025aae65652fb424c156 --- library/RLCMAC_Types.ttcn | 61 +++++++++++++++++++++++++++++++++++++++ pcu/PCU_Tests_RAW.ttcn | 21 ++++++++++---- 2 files changed, 76 insertions(+), 6 deletions(-) diff --git a/library/RLCMAC_Types.ttcn b/library/RLCMAC_Types.ttcn index 8f9f2a5c8..dbcf4ae2c 100644 --- a/library/RLCMAC_Types.ttcn +++ b/library/RLCMAC_Types.ttcn @@ -41,6 +41,67 @@ module RLCMAC_Types { return 0; } + type enumerated CodingScheme { + CS_1, + CS_2, + CS_3, + CS_4, + MCS_1, + MCS_2, + MCS_3, + MCS_4, + MCS_5, + MCS_6, + MCS_7, + MCS_8, + MCS_9 + //MCS5_7, ? + // MCS6_9 ? + }; + + function f_rlcmac_cs_mcs2block_len(CodingScheme cs_mcs) return uint32_t { + select (cs_mcs) { + case (CS_1) { return 23; } + case (CS_2) { return 34; } + case (CS_3) { return 40; } + case (CS_4) { return 54; } + case (MCS_1) { return 27; } + case (MCS_2) { return 33; } + case (MCS_3) { return 42; } + case (MCS_4) { return 49; } + case (MCS_5) { return 61; } + case (MCS_6) { return 79; } + case (MCS_7) { return 119; } + case (MCS_8) { return 143; } + case (MCS_9) { return 155; } + } + return 0; + } + + function f_rlcmac_block_len2cs_mcs(uint32_t len) return CodingScheme { + select (len) { + case (23) { return CS_1; } + case (34) { return CS_2; } + case (40) { return CS_3; } + case (54) { return CS_4; } + case (27) { return MCS_1; } + case (33) { return MCS_2; } + case (42) { return MCS_3; } + case (49) { return MCS_4; } + case (60) { return MCS_5; } + case (61) { return MCS_5; } + case (78) { return MCS_6; } + case (79) { return MCS_6; } + case (118) { return MCS_7; } + case (119) { return MCS_7; } + case (142) { return MCS_8; } + case (143) { return MCS_8; } + case (154) { return MCS_9; } + case (155) { return MCS_9; } + } + return CS_1; + } + /* Partof DL RLC data block and DL RLC/MAC ctrl block */ type record DlMacHeader { MacPayloadType payload_type, diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn index ad89c6959..2564617c2 100644 --- a/pcu/PCU_Tests_RAW.ttcn +++ b/pcu/PCU_Tests_RAW.ttcn @@ -419,12 +419,19 @@ runs on RAW_PCU_Test_CT { } } -private function f_rx_rlcmac_dl_block(out RlcmacDlBlock dl_block, out uint32_t dl_fn) +private function f_rx_rlcmac_dl_block(out RlcmacDlBlock dl_block, out uint32_t dl_fn, template (present) CodingScheme exp_cs_mcs := ?) runs on RAW_PCU_Test_CT { var PCUIF_Message pcu_msg; f_pcuif_rx_data_req(pcu_msg); dl_block := dec_RlcmacDlBlock(pcu_msg.u.data_req.data); dl_fn := pcu_msg.u.data_req.fn; + + var integer len := lengthof(pcu_msg.u.data_req.data); + var CodingScheme cs_mcs := f_rlcmac_block_len2cs_mcs(len) + if (not match(f_rlcmac_block_len2cs_mcs(len), exp_cs_mcs)) { + setverdict(fail, "Failed to match Coding Scheme exp ", exp_cs_mcs, " vs ", cs_mcs, " (", len, ")"); + mtc.stop; + } } private function f_rx_rlcmac_dl_block_exp_ack_nack(out RlcmacDlBlock dl_block, out uint32_t poll_fn) @@ -475,7 +482,7 @@ runs on RAW_PCU_Test_CT { } } -private function f_rx_rlcmac_dl_block_exp_data(out RlcmacDlBlock dl_block, out uint32_t ack_fn, octetstring data, template (present) uint7_t exp_bsn := ?) +private function f_rx_rlcmac_dl_block_exp_data(out RlcmacDlBlock dl_block, out uint32_t ack_fn, octetstring data, template (present) uint7_t exp_bsn := ?, template (present) CodingScheme exp_cs := ?) runs on RAW_PCU_Test_CT { var PCUIF_Message pcu_msg; var uint32_t dl_fn; @@ -1202,7 +1209,7 @@ testcase TC_mo_ping_pong() runs on RAW_PCU_Test_CT { /* Test scenario where SGSN wants to send some data against MS and it is * answered by the MS on PDCH, so TBFs for downlink and later for uplink are created. */ -private function f_TC_mt_ping_pong(template (omit) MSRadioAccessCapabilityV_BSSGP ms_racap := omit) runs on RAW_PCU_Test_CT { +private function f_TC_mt_ping_pong(template (omit) MSRadioAccessCapabilityV_BSSGP ms_racap := omit, template (present) CodingScheme exp_cs_mcs := ?) runs on RAW_PCU_Test_CT { var GsmRrMessage rr_imm_ass; var PacketUlAssign ul_tbf_ass; var PacketDlAssign dl_tbf_ass; @@ -1236,7 +1243,7 @@ private function f_TC_mt_ping_pong(template (omit) MSRadioAccessCapabilityV_BSSG /* Wait timer X2002 and DL block is available after CCCH IMM ASS: */ f_sleep(X2002); - f_rx_rlcmac_dl_block_exp_data(dl_block, sched_fn, data, 0); + f_rx_rlcmac_dl_block_exp_data(dl_block, sched_fn, data, 0, exp_cs_mcs); /* ACK the DL block */ f_acknackdesc_ack_block(ack_nack_desc, dl_block.data.mac_hdr.hdr_ext.bsn, '1'B); @@ -1265,7 +1272,8 @@ private function f_TC_mt_ping_pong(template (omit) MSRadioAccessCapabilityV_BSSG } testcase TC_mt_ping_pong() runs on RAW_PCU_Test_CT { - f_TC_mt_ping_pong(omit); + var CodingScheme exp_cs_mcs := CS_1; + f_TC_mt_ping_pong(omit, exp_cs_mcs); } /* TC_mt_ping_pong, but DL-UNITDATA contains RA Access capability with (M)CS @@ -1276,7 +1284,8 @@ testcase TC_mt_ping_pong_with_dl_racap() runs on RAW_PCU_Test_CT { gprsextendeddynalloccap := '0'B } ; var MSRadioAccessCapabilityV_BSSGP ms_racap := { valueof(ts_RaCapRec_BSSGP('0001'B /* E-GSM */, mscap_gprs, omit)) }; - f_TC_mt_ping_pong(ms_racap); + var CodingScheme exp_cs_mcs := CS_2; + f_TC_mt_ping_pong(ms_racap, exp_cs_mcs); } /* Verify that if PCU doesn't get an ACK for first DL block after IMM ASS, it