From 2e459d602ee491b38471b57bc37bc66d07ff5e09 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Mon, 30 Nov 2020 19:34:16 +0100 Subject: [PATCH] pcu: Verify LLC UI dummy frames are not appended at end of rlcmac DL block LLC UI dummy frames are only to be sent alone in order to delay TBF termination. Until recently (osmo-pcu.git Ifae1a7b2b3dfad8df19585063088ba0df2749c8f), osmo-pcu was sending LLC UI dummy frames instead of padding at RLCMAC layer, which made no sense. Related: OS#4849 Change-Id: I7e0d9ed2475dbf989fbf932c8b83117ff5fb28fc --- pcu/GPRS_Components.ttcn | 14 -------- pcu/PCU_Tests.ttcn | 77 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 14 deletions(-) diff --git a/pcu/GPRS_Components.ttcn b/pcu/GPRS_Components.ttcn index 0850a3d63..16036ad45 100644 --- a/pcu/GPRS_Components.ttcn +++ b/pcu/GPRS_Components.ttcn @@ -1001,13 +1001,6 @@ runs on MS_BTS_IFACE_CT { f_shutdown(__BFILE__, __LINE__); } - /* Check next data blocks contain dummy frames */ - if (lengthof(data_block.blocks) > 1 and substr(data_block.blocks[1].payload, 0, 3) != '43C001'O) { - setverdict(fail, "Second data payload is not a dummy frame: ", - data_block.blocks[1].payload); - f_shutdown(__BFILE__, __LINE__); - } - if (not match(data_block.cs, exp_cs)) { setverdict(fail, "Failed to match ", data_block.cs, " vs exp ", exp_cs); f_shutdown(__BFILE__, __LINE__); @@ -1036,13 +1029,6 @@ runs on MS_BTS_IFACE_CT { f_shutdown(__BFILE__, __LINE__); } - /* Check next data blocks contain dummy frames */ - if (lengthof(data_block.blocks) > 1 and substr(data_block.blocks[1].payload, 0, 3) != '43C001'O) { - setverdict(fail, "Second data payload is not a dummy frame: ", - data_block.blocks[1].payload); - f_shutdown(__BFILE__, __LINE__); - } - if (not match(data_block.mcs, exp_cs)) { setverdict(fail, "Failed to match ", data_block.mcs, " vs exp ", exp_cs); f_shutdown(__BFILE__, __LINE__); diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn index 67a811dbe..dad08739e 100644 --- a/pcu/PCU_Tests.ttcn +++ b/pcu/PCU_Tests.ttcn @@ -2546,6 +2546,81 @@ testcase TC_bssgp_dl_unitdata_with_invalid_imsi() runs on RAW_PCU_Test_CT { f_shutdown(__BFILE__, __LINE__, final := true); } +private function f_tc_dl_data_no_llc_ui_dummy(template (omit) MSRadioAccessCapabilityV_BSSGP ms_racap := omit) runs on RAW_PCU_Test_CT { + var AckNackDescription ack_nack_desc := valueof(t_AckNackDescription_init); + var octetstring data := f_rnd_octstring(6); + var RlcmacDlBlock dl_block; + var GprsMS ms; + var uint32_t fn; + + /* Initialize NS/BSSGP side */ + f_init_bssgp(); + /* Initialize GPRS MS side */ + f_init_gprs_ms(); + ms := g_ms[0]; /* We only use first MS in this test */ + + /* Initialize the PCU interface abstraction */ + f_init_raw(testcasename()); + + /* Establish BSSGP connection to the PCU */ + f_bssgp_establish(); + f_bssgp_client_llgmm_assign(TLLI_UNUSED, ms.tlli); + + /* SGSN sends some DL data, PCU will page on CCCH (PCH) */ + BSSGP[0].send(ts_BSSGP_DL_UD(ms.tlli, data, ms_racap)); + f_ms_exp_dl_tbf_ass_ccch(ms, PCU_IF_SAPI_PCH); + + /* Wait timer X2002 and DL block is available after CCCH IMM ASS */ + f_sleep(X2002); + + /* Expect the first (GPRS DL) block with bsn=0 and rrbp_valid=1 */ + f_rx_rlcmac_dl_block_exp_data(dl_block, fn, data, 0); + + if (ischosen(dl_block.data_egprs)) { + if (lengthof(dl_block.data_egprs.blocks) != 2) { + setverdict(fail, "DL EGPRS block has unexpected number of LLC frames: ", dl_block.data_egprs); + f_shutdown(__BFILE__, __LINE__); + } + if (dl_block.data_egprs.blocks[1].hdr.length_ind != 127) { + setverdict(fail, "DL EGPRS block 2nd llc frame is not padding!: ", dl_block.data_egprs); + f_shutdown(__BFILE__, __LINE__); + } + if (not match(dl_block.data_egprs.blocks[1].payload, + f_pad_oct(''O, lengthof(dl_block.data_egprs.blocks[1].payload), '2B'O))) { + setverdict(fail, "DL EGPRS block 2nd llc frame is not padding!: ", dl_block.data_egprs); + f_shutdown(__BFILE__, __LINE__); + } + } else if (lengthof(dl_block.data.blocks) > 1) { + setverdict(fail, "DL GPRS block has extra unexpected LLC frames: ", dl_block.data); + f_shutdown(__BFILE__, __LINE__); + } + + f_shutdown(__BFILE__, __LINE__, final := true); +} + +/* Verify osmo-pcu Doesn't append LLC UI dummy frames to rlcmac blocks + * containing llc data. See OS#4849 */ +testcase TC_dl_gprs_data_no_llc_ui_dummy() runs on RAW_PCU_Test_CT { + f_tc_dl_data_no_llc_ui_dummy(omit); +} + +/* Verify osmo-pcu Doesn't append LLC UI dummy frames to rlcmac blocks + * containing llc data. See OS#4849 */ +testcase TC_dl_egprs_data_no_llc_ui_dummy() runs on RAW_PCU_Test_CT { + + var MultislotCap_GPRS_BSSGP mscap_gprs := { + gprsmultislotclass := '00011'B, + gprsextendeddynalloccap := '0'B + }; + var MultislotCap_EGPRS_BSSGP mscap_egprs := { + egprsmultislotclass := '00011'B, + egprsextendeddynalloccap := '0'B + }; + var MSRadioAccessCapabilityV_BSSGP ms_racap := { valueof(ts_RaCapRec_BSSGP('0001'B /* E-GSM */, mscap_gprs, mscap_egprs)) }; + + f_tc_dl_data_no_llc_ui_dummy(ms_racap); +} + private function f_TC_egprs_pkt_chan_req(in EGPRSPktChRequest req, template GsmRrMessage t_imm_ass := ?, PCUIF_BurstType bt := BURST_TYPE_1) @@ -3459,6 +3534,8 @@ control { execute( TC_paging_cs_multi_ms_tmsi() ); execute( TC_bssgp_dl_unitdata_with_valid_imsi() ); execute( TC_bssgp_dl_unitdata_with_invalid_imsi() ); + execute( TC_dl_gprs_data_no_llc_ui_dummy() ); + execute( TC_dl_egprs_data_no_llc_ui_dummy() ); /* EGPRS specific test cases */ execute( TC_egprs_pkt_chan_req_signalling() );