aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2019-09-09 01:51:09 +0200
committerVadim Yanitskiy <axilirator@gmail.com>2019-09-09 16:30:47 +0200
commit6edd4f5a0692cdd3efe839a929a4b2629ebba758 (patch)
tree394ab8d2ab34d553ff8d30ae2d7de0a298fd7084
parent7091e8de880200e5c073419344136cdbe6e31624 (diff)
library/GSM_RR_Types.ttcn: introduce generic tr_IMM_TBF_ASS
Both 't_IMM_ASS_TBF_DL' and 't_RR_IMM_ASS_TBF_DL' templates were introduced for a specific task - matching Packet Immediate Assignment (Downlink TBF) by TLLI. In the upcoming changes we will also need to match Uplink TBF assignment, and more generic fields such as Timing Advance. Let's add a generic template for Packet Immediate Assignment and allow passing IaRestOctets as a parameter. Change-Id: I492cf990820ba153ea71469b8b623e56e031e549
-rw-r--r--library/GSM_RR_Types.ttcn59
-rw-r--r--library/L1CTL_PortType.ttcn5
-rw-r--r--pcu/PCU_Tests.ttcn4
3 files changed, 33 insertions, 35 deletions
diff --git a/library/GSM_RR_Types.ttcn b/library/GSM_RR_Types.ttcn
index 3d2f76ae..70009ac0 100644
--- a/library/GSM_RR_Types.ttcn
+++ b/library/GSM_RR_Types.ttcn
@@ -884,6 +884,32 @@ module GSM_RR_Types {
}
};
+ /* TODO: implement send version of this template */
+ template GsmRrMessage tr_IMM_TBF_ASS(template boolean dl := ?,
+ template uint8_t ra := ?,
+ template GsmFrameNumber fn := ?,
+ template TimingAdvance ta := ?,
+ template PacketChannelDescription ch_desc := ?,
+ template IaRestOctets rest := ?) := {
+ header := t_RrHeader(IMMEDIATE_ASSIGNMENT, ?),
+ payload := {
+ imm_ass := {
+ ded_or_tbf := {
+ spare := ?,
+ tma := ?,
+ downlink := dl,
+ tbf := true
+ },
+ page_mode := ?,
+ chan_desc := omit,
+ pkt_chan_desc := ch_desc,
+ req_ref := tr_compute_ReqRef(ra, fn),
+ timing_advance := ta,
+ mobile_allocation := ?,
+ rest_octets := rest
+ }
+ }
+ };
template (value) GsmRrL3Message ts_MEAS_REP(boolean valid, uint6_t rxl_f, uint6_t rxl_s,
uint3_t rxq_f, uint3_t rxq_s,
@@ -908,37 +934,4 @@ module GSM_RR_Types {
}
};
- /* TODO: introduce generic TBF Assignment template for DL and UL */
- template ImmediateAssignment t_IMM_ASS_TBF_DL(template GprsTlli tlli) := {
- ded_or_tbf := {
- spare := ?,
- tma := ?,
- downlink := ?,
- tbf := true
- },
- page_mode := ?,
- chan_desc := omit,
- pkt_chan_desc := {
- channel_Type_spare := ?,
- tn := ?,
- tsc := ?,
- presence := ?,
- zero := *,
- one := omit
- },
- req_ref := ?,
- timing_advance := ?,
- mobile_allocation := ?,
- rest_octets := tr_IaRestOctets_DLAss(tr_PacketDlAssign(tlli))
- };
-
- template GsmRrMessage t_RR_IMM_ASS_TBF_DL(template GprsTlli tlli) := {
- header := t_RrHeader(IMMEDIATE_ASSIGNMENT, ?),
- payload := {
- imm_ass := t_IMM_ASS_TBF_DL(tlli)
- }
- };
-
-
-
} with { encode "RAW" ; variant "FIELDORDER(msb)" }
diff --git a/library/L1CTL_PortType.ttcn b/library/L1CTL_PortType.ttcn
index 2423715a..3c83c3da 100644
--- a/library/L1CTL_PortType.ttcn
+++ b/library/L1CTL_PortType.ttcn
@@ -152,15 +152,18 @@ module L1CTL_PortType {
}
function f_L1CTL_WAIT_IMM_ASS_TBF_DL(L1CTL_PT pt, GprsTlli tlli) return ImmediateAssignment {
+ var template PacketDlAssign dl_ass := tr_PacketDlAssign(tlli);
+ var template IaRestOctets rest := tr_IaRestOctets_DLAss(dl_ass);
var L1ctlDlMessage dl;
var GsmRrMessage rr;
timer T := 10.0;
T.start;
alt {
[] pt.receive(tr_L1CTL_DATA_IND(t_RslChanNr_PCH_AGCH(0))) -> value dl {
+ /* TODO: use decmatch tr_IaRestOctets_DLAss(...) instead */
rr := dec_GsmRrMessage(dl.payload.data_ind.payload);
log("PCH/AGCN DL RR: ", rr);
- if (match(rr, t_RR_IMM_ASS_TBF_DL(tlli))) {
+ if (match(rr, tr_IMM_TBF_ASS(dl := true, rest := rest))) {
log("Received IMM.ASS for our TLLI!");
} else {
repeat;
diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn
index 4ef71fa9..838b6e1f 100644
--- a/pcu/PCU_Tests.ttcn
+++ b/pcu/PCU_Tests.ttcn
@@ -591,6 +591,8 @@ testcase TC_dl_tbf() runs on dummy_CT {
}
function f_wait_tbf_dl(TbfNr tbf_nr, GprsTlli tlli) runs on dummy_CT return ImmediateAssignment {
+ var template PacketDlAssign dl_ass := tr_PacketDlAssign(tlli);
+ var template IaRestOctets rest := tr_IaRestOctets_DLAss(dl_ass);
var LAPDm_ph_data ph_data;
var GsmRrMessage rr;
timer T := 10.0;
@@ -599,7 +601,7 @@ function f_wait_tbf_dl(TbfNr tbf_nr, GprsTlli tlli) runs on dummy_CT return Imme
[] L1.receive(LAPDm_ph_data:{sacch:=?,sapi:=0,lapdm:={bbis:=?}}) -> value ph_data {
rr := dec_GsmRrMessage(ph_data.lapdm.bbis.payload);
log("PCH/AGCH DL RR: ", rr);
- if (match(rr, t_RR_IMM_ASS_TBF_DL(tlli))) {
+ if (match(rr, tr_IMM_TBF_ASS(dl := true, rest := rest))) {
var TbfPars tbf_pars := valueof(t_TbfParsInit);
log("Received IMM.ASS for our TLLI!");
tbf_pars.tfi[rr.payload.imm_ass.pkt_chan_desc.tn] :=