Change in osmo-ttcn3-hacks[master]: pcu: Implement ACKing EGPRS Dl TBF 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
Thu Nov 12 20:14:41 UTC 2020


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


Change subject: pcu: Implement ACKing EGPRS Dl TBF blocks
......................................................................

pcu: Implement ACKing EGPRS Dl TBF blocks

Change-Id: I9f1b621a8365e69d2e1a33d59cb8c7a59639ad94
---
M pcu/GPRS_Components.ttcn
1 file changed, 95 insertions(+), 9 deletions(-)



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

diff --git a/pcu/GPRS_Components.ttcn b/pcu/GPRS_Components.ttcn
index 2686ba3..213d24d 100644
--- a/pcu/GPRS_Components.ttcn
+++ b/pcu/GPRS_Components.ttcn
@@ -77,7 +77,8 @@
 	uint5_t			tfi,
 	GsmArfcn		arfcn optional,
 	BIT8                    ts_mask,
-	AckNackDescription	acknack_desc
+	AckNackDescription	acknack_desc,
+	EgprsAckNackDescription	egprs_acknack_desc
 };
 
 type union PacketUlAssignChan {
@@ -117,6 +118,15 @@
 	receive_block_bitmap := '0000000000000000000000000000000000000000000000000000000000000000'B
 }
 
+template EgprsAckNackDescription t_EgprsAckNackDescription_init := {
+	final_ack := '0'B,
+	begin_window := '1'B,
+	end_window := '1'B,
+	starting_seq_nr := 0,
+	compressed := '0'B,
+	urbb := '0000000000000000000000000000000000000000000000000000000000000000'B
+}
+
 const uint3_t USF_UNUSED := 7; /* used to indicate PRACH */
 
 template (value) GprsMS t_GprsMS_def := {
@@ -137,7 +147,8 @@
 	tfi := 0,
 	arfcn := omit,
 	ts_mask := '00000000'B,
-	acknack_desc := t_AckNackDescription_init
+	acknack_desc := t_AckNackDescription_init,
+	egprs_acknack_desc := t_EgprsAckNackDescription_init
 };
 
 template (value) UlTbf t_UlTbf_def := {
@@ -401,10 +412,33 @@
 	return n;
 }
 
+function f_dltbf_ack_block(inout DlTbf dl_tbf, RlcmacDlBlock dl_block, BIT1 final_ack := '0'B)
+runs on MS_BTS_IFACE_CT {
+	var boolean is_egprs := ischosen(dl_block.data_egprs);
+	if (is_egprs) {
+		f_egprs_acknackdesc_ack_block(dl_tbf.egprs_acknack_desc, dl_block, final_ack);
+	} else {
+		f_acknackdesc_ack_block(dl_tbf.acknack_desc, dl_block, final_ack);
+	}
+}
+
+function f_dltbf_ts_RLCMAC_DL_ACK_NACK(DlTbf dl_tbf, boolean use_egprs := false)
+runs on MS_BTS_IFACE_CT return template RlcmacUlBlock  {
+	if (use_egprs) {
+		return ts_RLCMAC_DL_ACK_NACK_EGPRS(dl_tbf.tfi, dl_tbf.egprs_acknack_desc);
+	} else {
+		return ts_RLCMAC_DL_ACK_NACK(dl_tbf.tfi, dl_tbf.acknack_desc);
+	}
+}
+
 function f_ultbf_inc_bsn(inout UlTbf ul_tbf)
 runs on MS_BTS_IFACE_CT {
 	ul_tbf.bsn := ul_tbf.bsn + 1;
-	ul_tbf.bsn := ul_tbf.bsn mod 128; /* FIXME: EGPRS SNS: 2048 */
+	if (ul_tbf.is_egprs) {
+		ul_tbf.bsn := ul_tbf.bsn mod 2048;
+	} else {
+		ul_tbf.bsn := ul_tbf.bsn mod 128;
+	}
 }
 
 function f_ultbf_next_ts(UlTbf ul_tbf)
@@ -640,12 +674,7 @@
 	var uint7_t bsn;
 	var integer i;
 	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;
-	}
+	bsn := dl_block.data.mac_hdr.hdr_ext.bsn;
 
 	/* Filling hole? */
 	if (bsn < desc.starting_seq_nr) {
@@ -675,6 +704,52 @@
 	desc.final_ack := final_ack;
 }
 
+/* TS 44.060 sec 12.3 Ack/Nack Description */
+function f_egprs_acknackdesc_ack_block(inout EgprsAckNackDescription desc, RlcmacDlBlock dl_block, BIT1 final_ack := '0'B)
+{
+	var uint11_t bsn;
+	var integer i;
+	var integer inc;
+	var integer n := 0;
+
+	bsn := dl_block.data_egprs.mac_hdr.bsn1;
+
+	/* Repetition? */
+	if (bsn < desc.starting_seq_nr) {
+		/* Filling hole, wraparound: */
+		if (bsn - desc.starting_seq_nr > lengthof(desc.urbb)) {
+			desc.urbb[lengthof(desc.urbb) - (desc.starting_seq_nr + (2048 - bsn))] := int2bit(1, 1);
+			return;
+		}
+		return;
+	}
+
+	inc := bsn - desc.starting_seq_nr + 1;
+	desc.urbb[lengthof(desc.urbb) - inc] := int2bit(1, 1);
+
+	for (i :=  lengthof(desc.urbb) - 1; i >= lengthof(desc.urbb) - inc; i := i - 1) {
+		if (desc.urbb[i] == '0'B) {
+			break;
+		}
+		n := n + 1;
+	}
+
+	if (n > 0) {
+		/* SSN is increased, and so RBB values need to be moved */
+		for (i :=  lengthof(desc.urbb) - 1; i >= n; i := i - 1) {
+			desc.urbb[i] := desc.urbb[i - n];
+		}
+		for (i := n - 1; i >= 0; i := i - 1) {
+			desc.urbb[i] := int2bit(0, 1);
+		}
+
+		desc.starting_seq_nr := (desc.starting_seq_nr + n) mod 2048;
+	}
+
+	/* Finally update the final_ack bit as requested: */
+	desc.final_ack := final_ack;
+}
+
 /* This function can be used to send DATA.cnf in response to the IUT originated DATA.req.
  * NOTE: it's the responsibility of caller to make sure that pcu_msg contains u.data_req. */
 function f_pcuif_tx_data_cnf(in PCUIF_Message pcu_msg)
@@ -1036,6 +1111,17 @@
 	return f_rrbp_ack_fn(dl_fn, rrbp);
 }
 
+function f_dl_block_rrbp_valid(in RlcmacDlBlock dl_block)
+runs on MS_BTS_IFACE_CT return boolean {
+	if (ischosen(dl_block.data_egprs)) {
+		return dl_block.data_egprs.mac_hdr.esp != '00'B;
+	} else if (ischosen(dl_block.data)) {
+		return dl_block.data.mac_hdr.mac_hdr.rrbp_valid;
+	} else {
+		return dl_block.ctrl.mac_hdr.rrbp_valid;
+	}
+}
+
 /* Return true if a given Packet Paging Request contains the given IMSI, false otherwise */
 function f_pkt_paging_match_imsi(in PacketPagingReq req, template hexstring imsi,
 				 boolean cs_domain := true, boolean ps_domain := true)

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/21127
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: I9f1b621a8365e69d2e1a33d59cb8c7a59639ad94
Gerrit-Change-Number: 21127
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/20201112/d3acdeb0/attachment.htm>


More information about the gerrit-log mailing list