Change in osmo-ttcn3-hacks[master]: pcu: Parse TS and TRX allocation from Assignment in Ul/DlTbf objects

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
Wed Oct 28 20:31:56 UTC 2020


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


Change subject: pcu: Parse TS and TRX allocation from Assignment in Ul/DlTbf objects
......................................................................

pcu: Parse TS and TRX allocation from Assignment in Ul/DlTbf objects

This will allow tests to use multitrx and multislot scenarios.

Change-Id: Ia2b9dd73f61c7068a729b427c118ae2ef027c30b
---
M pcu/GPRS_Components.ttcn
1 file changed, 51 insertions(+), 8 deletions(-)



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

diff --git a/pcu/GPRS_Components.ttcn b/pcu/GPRS_Components.ttcn
index 6f3e3e2..ec62671 100644
--- a/pcu/GPRS_Components.ttcn
+++ b/pcu/GPRS_Components.ttcn
@@ -76,9 +76,11 @@
 };
 
 type record DlTbf {
-	GsmRrMessage		rr_imm_ass,
-	PacketDlAssignChan	ass,
+	GsmRrMessage		rr_imm_ass optional,
+	PacketDlAssignChan	ass optional,
 	uint5_t			tfi,
+	uint10_t		arfcn,
+	BIT8                    ts_mask,
 	AckNackDescription	acknack_desc
 };
 
@@ -92,6 +94,8 @@
 	GsmRrMessage		rr_imm_ass optional,
 	PacketUlAssignChan	ass optional,
 	uint5_t			tfi,
+	uint10_t		arfcn,
+	BIT8                    ts_mask,
 	uint3_t			usf[8],
 	boolean			is_egprs,
 	uint14_t		bsn,
@@ -131,10 +135,21 @@
         dl_tbf := omit
 };
 
+template (value) DlTbf t_DlTbf_def := {
+	rr_imm_ass := omit,
+	ass := omit,
+	tfi := 0,
+	arfcn := 0,
+	ts_mask := '00000000'B,
+	acknack_desc := t_AckNackDescription_init
+};
+
 template (value) UlTbf t_UlTbf_def := {
 	rr_imm_ass := omit,
 	ass := omit,
 	tfi := 0,
+	arfcn := 0,
+	ts_mask := '00000000'B,
 	usf := { USF_UNUSED, USF_UNUSED, USF_UNUSED, USF_UNUSED, USF_UNUSED, USF_UNUSED, USF_UNUSED, USF_UNUSED },
 	is_egprs := false,
 	bsn := 0,
@@ -188,6 +203,13 @@
 	var uint3_t tn_allocated := rr_imm_ass.payload.imm_ass.pkt_chan_desc.tn;
 
 	ul_tbf.rr_imm_ass := rr_imm_ass;
+	if (rr_imm_ass.payload.imm_ass.pkt_chan_desc.presence == '1'B) {
+		/* TODO: Frequency Hopping: take MAIO and so from .one. */
+		ul_tbf.arfcn := 871;
+	} else {
+		ul_tbf.arfcn := rr_imm_ass.payload.imm_ass.pkt_chan_desc.zero.arfcn;
+	}
+	ul_tbf.ts_mask[tn_allocated] := '1'B;
 
 	/* Make sure we received an UL TBF Assignment */
 	if (match(rr_imm_ass, tr_IMM_TBF_ASS(dl := false, rest := tr_IaRestOctets_ULAss(?)))) {
@@ -233,17 +255,22 @@
 	/* TODO: support single block allocation */
 	if (match(dl_block, tr_RLCMAC_UL_PACKET_ASS_GPRS(?, tr_PktUlAssGprsDynamic(tr_DynamicAllocation(?))))) {
 		ul_tbf.tfi := dl_block.ctrl.payload.u.ul_assignment.gprs.dyn_block_alloc.ul_tfi_assignment;
+		// FIXME: freq_par and arfcn are optional. in that case we need to infer/reuse from current dl_tbf or ul_tbf */
+		ul_tbf.arfcn := dl_block.ctrl.payload.u.ul_assignment.gprs.freq_par.arfcn;
 		ul_tbf.is_egprs := false;
 		for (var integer i := 0; i < 8; i := i + 1) {
 			if (dl_block.ctrl.payload.u.ul_assignment.gprs.dyn_block_alloc.ts_allocation.ts[i].presence == '1'B) {
+				ul_tbf.ts_mask[i] := '1'B;
 				ul_tbf.usf[i] := dl_block.ctrl.payload.u.ul_assignment.gprs.dyn_block_alloc.ts_allocation.ts[i].usf_tn;
 			}
 		}
 	} else if (match(dl_block, tr_RLCMAC_UL_PACKET_ASS_EGPRS(?, tr_PktUlAssEgprsDynamic(tr_DynamicAllocation(?))))) {
 		ul_tbf.tfi := dl_block.ctrl.payload.u.ul_assignment.egprs.dyn_block_alloc.ul_tfi_assignment;
+		ul_tbf.arfcn := dl_block.ctrl.payload.u.ul_assignment.egprs.freq_par.arfcn;
 		ul_tbf.is_egprs := true;
 		for (var integer i := 0; i < 8; i := i + 1) {
 			if (dl_block.ctrl.payload.u.ul_assignment.egprs.dyn_block_alloc.ts_allocation.ts[i].presence == '1'B) {
+				ul_tbf.ts_mask[i] := '1'B;
 				ul_tbf.usf[i] := dl_block.ctrl.payload.u.ul_assignment.egprs.dyn_block_alloc.ts_allocation.ts[i].usf_tn;
 			}
 		}
@@ -253,10 +280,16 @@
 
 function f_dltbf_new_from_rr_imm_ass(in GsmRrMessage rr_imm_ass, template PacketDlAssign dl_ass := tr_PacketDlAssign(?))
 runs on MS_BTS_IFACE_CT return DlTbf {
-	var DlTbf dl_tbf;
+	var DlTbf dl_tbf := valueof(t_DlTbf_def);
 
 	dl_tbf.rr_imm_ass := rr_imm_ass;
-	dl_tbf.acknack_desc := valueof(t_AckNackDescription_init);
+	if (rr_imm_ass.payload.imm_ass.pkt_chan_desc.presence == '1'B) {
+		/* TODO: Frequency Hopping: take MAIO and so from .one. */
+		dl_tbf.arfcn := 871;
+	} else {
+		dl_tbf.arfcn := rr_imm_ass.payload.imm_ass.pkt_chan_desc.zero.arfcn;
+	}
+	dl_tbf.ts_mask[rr_imm_ass.payload.imm_ass.pkt_chan_desc.tn] := '1'B;
 
 	/* Make sure we received a DL TBF Assignment */
 	if (match(rr_imm_ass, tr_IMM_TBF_ASS(dl := true, rest := tr_IaRestOctets_DLAss(dl_ass)))) {
@@ -279,15 +312,21 @@
 	return dl_tbf;
 }
 
-/* TODO: get stuff from f_rx_rlcmac_dl_block_exp_pkt_ass */
 function f_dltbf_new_from_ass_pacch(RlcmacDlBlock dl_block)
 runs on MS_BTS_IFACE_CT return DlTbf {
-	var DlTbf dl_tbf;
+	var DlTbf dl_tbf := valueof(t_DlTbf_def);
 
 	dl_tbf.ass.pacch := dl_block.ctrl.payload.u.dl_assignment;
 	dl_tbf.tfi := f_rlcmac_dl_block_get_tfi(dl_block);
 	/* TODO: handle GlobalTfiOrTlli	 tfi_or_tlli from pkt_dl_ass */
-	dl_tbf.acknack_desc := valueof(t_AckNackDescription_init);
+
+	if (match(dl_block, tr_RLCMAC_DL_PACKET_ASS(?))) {
+		dl_tbf.tfi := dl_block.ctrl.payload.u.dl_assignment.dl_tfi_assignment;
+		// FIXME: freq_par and arfcn are optional. in that case we need to infer/reuse from current dl_tbf or ul_tbf */
+		dl_tbf.arfcn := dl_block.ctrl.payload.u.dl_assignment.freq_par.arfcn;
+		dl_tbf.ts_mask := dl_block.ctrl.payload.u.dl_assignment.timeslot_alloc; /* TODO: is this the correct order ? */
+		/* TODO: check egprs in dl_assignment.rel_additions (PktDlAssR99Additions) */
+	}
 	return dl_tbf;
 }
 
@@ -331,7 +370,11 @@
 	       }
 	} else if (match(dl_block, tr_RLCMAC_DL_PACKET_ASS)) {
 		ms.dl_tbf := f_dltbf_new_from_ass_pacch(dl_block);
-		/* TODO: match tlli from ms.dl_tbf.ass.pacch with ms.tlli), or error */
+		if (ischosen(ms.dl_tbf.ass.pacch.tfi_or_tlli.tlli) and
+		    ms.dl_tbf.ass.pacch.tfi_or_tlli.tlli.tlli != ms.tlli) {
+			setverdict(fail, "Wrong TLLI ", ms.dl_tbf.ass.pacch.tfi_or_tlli.tlli.tlli, " received vs exp ", ms.tlli);
+			f_shutdown(__BFILE__, __LINE__);
+		}
 	} else {
 		setverdict(fail, "Should not happen:", dl_block);
 		f_shutdown(__BFILE__, __LINE__);

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20946
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: Ia2b9dd73f61c7068a729b427c118ae2ef027c30b
Gerrit-Change-Number: 20946
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/20201028/0c7086a4/attachment.htm>


More information about the gerrit-log mailing list