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.orgpespin 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>