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>