Change in osmo-ttcn3-hacks[master]: pcu: Support retrieving BSN and TFI in tests from data_egprs blocks

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

pespin gerrit-no-reply at lists.osmocom.org
Tue Apr 28 16:19:56 UTC 2020


pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17970 )


Change subject: pcu: Support retrieving BSN and TFI in tests from data_egprs blocks
......................................................................

pcu: Support retrieving BSN and TFI in tests from data_egprs blocks

function helpers are slightly modified or added to accomodate for fields
in egprs data blocks being in different places.

Change-Id: I570fb7346519b2a161515e0ec40bd1870a89d673
---
M pcu/PCU_Tests_RAW.ttcn
1 file changed, 97 insertions(+), 24 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/70/17970/1

diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn
index d491f48..0f565b9 100644
--- a/pcu/PCU_Tests_RAW.ttcn
+++ b/pcu/PCU_Tests_RAW.ttcn
@@ -219,11 +219,28 @@
 	receive_block_bitmap := '0000000000000000000000000000000000000000000000000000000000000000'B
 }
 
+private function f_rlcmac_dl_block_get_tfi(RlcmacDlBlock dl_block) return uint5_t {
+	if (ischosen(dl_block.data)) {
+		return dl_block.data.mac_hdr.hdr_ext.tfi;
+	} else {
+		return dl_block.data_egprs.mac_hdr.tfi;
+	}
+}
+
 /* TS 44.060 sec 12.3 Ack/Nack Description */
-private function f_acknackdesc_ack_block(inout AckNackDescription desc, uint7_t bsn, BIT1 final_ack := '0'B)
+private function f_acknackdesc_ack_block(inout AckNackDescription desc, RlcmacDlBlock dl_block, BIT1 final_ack := '0'B)
 {
+	var uint7_t bsn;
 	var integer i;
-	var integer inc := bsn - desc.starting_seq_nr + 1;
+	var integer inc;
+
+	if (ischosen(dl_block.data)) {
+		bsn := dl_block.data.mac_hdr.hdr_ext.bsn;
+	} else {
+		bsn := dl_block.data_egprs.mac_hdr.bsn1;
+	}
+
+	inc := bsn - desc.starting_seq_nr + 1;
 	/* Filling hole? */
 	if (bsn < desc.starting_seq_nr) {
 		desc.receive_block_bitmap[lengthof(desc.receive_block_bitmap) - (desc.starting_seq_nr - bsn)] := int2bit(1, 1);
@@ -530,18 +547,9 @@
 	}
 }
 
-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;
-	var template RlcmacDlBlock dl_template := tr_RLCMAC_DATA_RRBP;
-	dl_template.data.blocks := ?;
-
-	f_rx_rlcmac_dl_block(dl_block, dl_fn);
-	if (not match(dl_block, dl_template)) {
-		setverdict(fail, "Failed to match Packet data: ", dl_block, " vs ", dl_template);
-		mtc.stop;
-	}
+private function f_rlcmac_dl_block_verify_data_gprs(RlcmacDlBlock dl_block, uint32_t dl_fn, out uint32_t ack_fn, octetstring data, template (present) uint7_t exp_bsn := ?, template (present) CodingScheme exp_cs := ?)
+{
+	log("verifying dl data block (gprs): ", dl_block);
 
 	ack_fn := dl_fn + f_rrbp_fn_delay(dl_block.data.mac_hdr.mac_hdr.rrbp);
 
@@ -571,6 +579,71 @@
 		setverdict(fail, "Second data payload is not a dummy frame: ", dl_block.data.blocks[1].payload);
 		mtc.stop;
 	}
+
+	/* TODO: check exp_cs */
+}
+
+private function f_rlcmac_dl_block_verify_data_egprs(RlcmacDlBlock dl_block, uint32_t dl_fn, out uint32_t ack_fn, octetstring data, template (present) uint14_t exp_bsn := ?, template (present) CodingScheme exp_cs := ?)
+{
+	log("verifying dl data block (egprs): ", dl_block);
+
+	ack_fn := dl_fn + f_rrbp_fn_delay(dl_block.data_egprs.mac_hdr.rrbp);
+
+	if (not match(dl_block.data_egprs.mac_hdr.bsn1, exp_bsn)) {
+		setverdict(fail, "DL block BSN doesn't match: ",
+			   dl_block.data_egprs.blocks[0].hdr.length_ind, " vs exp ", exp_bsn);
+	}
+
+	if (lengthof(dl_block.data_egprs.blocks) < 1) {
+		setverdict(fail, "DL block has no LLC payload: ", dl_block);
+		mtc.stop;
+	}
+
+	if (ispresent(dl_block.data_egprs.blocks[0].hdr) and dl_block.data_egprs.blocks[0].hdr.length_ind != lengthof(data)) {
+		setverdict(fail, "DL block has LLC header with wrong expected size: ",
+			   dl_block.data_egprs.blocks[0].hdr.length_ind, " vs ", lengthof(data));
+		mtc.stop;
+	}
+
+	if (dl_block.data_egprs.blocks[0].payload != data) {
+		setverdict(fail, "Failed to match content of LLC payload in DL Block: ", dl_block, " vs ", data);
+		mtc.stop;
+	}
+
+	/* Check next data blocks contain dummy frames */
+	if (lengthof(dl_block.data_egprs.blocks) > 1 and substr(dl_block.data_egprs.blocks[1].payload, 0, 3) != '43C001'O) {
+		setverdict(fail, "Second data payload is not a dummy frame: ", dl_block.data.blocks[1].payload);
+		mtc.stop;
+	}
+
+	/* TODO: Check exp_cs. In the case of EGPRS, first check mac_hdr.header_type and then decode CPS = exp_cs based on mac_hdr.header_type.
+		See wireshark's egprs_Header_type1_coding_puncturing_scheme_to_mcs. */
+}
+
+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;
+	var boolean is_egprs := false;
+	var template RlcmacDlBlock dl_template := tr_RLCMAC_DATA_RRBP;
+	dl_template.data.blocks := ?;
+
+	f_rx_rlcmac_dl_block(dl_block, dl_fn);
+	if (not match(dl_block, dl_template)) {
+		dl_template := tr_RLCMAC_DATA_EGPRS;
+		dl_template.data_egprs.blocks := ?;
+		if (not match(dl_block, dl_template)) {
+			setverdict(fail, "Failed to match Packet data: ", dl_block, " vs ", dl_template);
+			mtc.stop;
+		}
+		is_egprs := true;
+	}
+
+	if (is_egprs) {
+		f_rlcmac_dl_block_verify_data_egprs(dl_block, dl_fn, ack_fn, data, exp_bsn, exp_cs);
+	} else {
+		f_rlcmac_dl_block_verify_data_gprs(dl_block, dl_fn, ack_fn, data, exp_bsn, exp_cs);
+	}
 }
 
 testcase TC_pcuif_suspend() runs on RAW_PCU_Test_CT {
@@ -1203,8 +1276,8 @@
 	f_rx_rlcmac_dl_block_exp_data(dl_block, sched_fn, data, 0);
 
 	/* ACK the DL block */
-	f_acknackdesc_ack_block(ack_nack_desc, dl_block.data.mac_hdr.hdr_ext.bsn, '1'B);
-	f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(dl_block.data.mac_hdr.hdr_ext.tfi, ack_nack_desc), 0, sched_fn);
+	f_acknackdesc_ack_block(ack_nack_desc, dl_block, '1'B);
+	f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(f_rlcmac_dl_block_get_tfi(dl_block), ack_nack_desc), 0, sched_fn);
 	/* we are done with the DL-TBF here so far, let's clean up our local state: */
 	ack_nack_desc := valueof(t_AckNackDescription_init)
 
@@ -1217,8 +1290,8 @@
 
 	/* Now that we confirmed the new assignment in the dl-tbf, lets receive the data and ack it */
 	f_rx_rlcmac_dl_block_exp_data(dl_block, sched_fn, data, 0);
-	f_acknackdesc_ack_block(ack_nack_desc, dl_block.data.mac_hdr.hdr_ext.bsn, '1'B);
-	f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(dl_block.data.mac_hdr.hdr_ext.tfi, ack_nack_desc), 0, sched_fn);
+	f_acknackdesc_ack_block(ack_nack_desc, dl_block, '1'B);
+	f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(f_rlcmac_dl_block_get_tfi(dl_block), ack_nack_desc), 0, sched_fn);
 }
 
 /* Test scenario where MS wants to send some data on PDCH against SGSN and it is
@@ -1294,8 +1367,8 @@
 	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);
-	f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(dl_block.data.mac_hdr.hdr_ext.tfi, ack_nack_desc), 0, sched_fn);
+	f_acknackdesc_ack_block(ack_nack_desc, dl_block, '1'B);
+	f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(f_rlcmac_dl_block_get_tfi(dl_block), ack_nack_desc), 0, sched_fn);
 }
 
 /* Test scenario where MS wants to send some data on PDCH against SGSN and it is
@@ -1358,8 +1431,8 @@
 	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);
-	f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(dl_block.data.mac_hdr.hdr_ext.tfi, ack_nack_desc), 0, sched_fn);
+	f_acknackdesc_ack_block(ack_nack_desc, dl_block, '1'B);
+	f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(f_rlcmac_dl_block_get_tfi(dl_block), ack_nack_desc), 0, sched_fn);
 
 	/* Now MS wants to answer the DL data, Establish an Uplink TBF */
 	ok := f_establish_tbf(rr_imm_ass);
@@ -1450,8 +1523,8 @@
 	f_rx_rlcmac_dl_block_exp_data(dl_block, sched_fn, data, 0);
 
 	/* ACK the DL block */
-	f_acknackdesc_ack_block(ack_nack_desc, dl_block.data.mac_hdr.hdr_ext.bsn, '1'B);
-	f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(dl_block.data.mac_hdr.hdr_ext.tfi, ack_nack_desc), 0, sched_fn);
+	f_acknackdesc_ack_block(ack_nack_desc, dl_block, '1'B);
+	f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(f_rlcmac_dl_block_get_tfi(dl_block), ack_nack_desc), 0, sched_fn);
 }
 
 private function f_pkt_paging_match_imsi(in PacketPagingReq req, hexstring imsi) {

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17970
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I570fb7346519b2a161515e0ec40bd1870a89d673
Gerrit-Change-Number: 17970
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200428/4e8fd5eb/attachment.htm>


More information about the gerrit-log mailing list