library/PCUIF_Types: get rid of version 9 compatibility glue

Change-Id: Ia9f366ca1fdad700a90ca3367e43523f7bac39a1
Related: OS#5083
This commit is contained in:
Vadim Yanitskiy 2021-03-23 04:28:18 +01:00 committed by fixeria
parent 22deecc8ea
commit 1da1fefb73
4 changed files with 95 additions and 194 deletions

View File

@ -5687,7 +5687,7 @@ testcase TC_pcu_info_ind_fh_params() runs on test_CT {
for (var integer i := 0; i < mp_transceiver_num; i := i + 1) {
for (var integer tn := 0; tn < 8; tn := tn + 1) {
if (info_ind.trx.v10[i].pdch_mask[tn] != '1'B) {
if (info_ind.trx[i].pdch_mask[tn] != '1'B) {
/* Skip inactive timeslots */
continue;
}
@ -5708,7 +5708,7 @@ testcase TC_pcu_info_ind_fh_params() runs on test_CT {
tr_ts := tr_PCUIF_InfoTrxTsH0;
}
var PCUIF_InfoTrxTs ts := info_ind.trx.v10[i].ts[tn];
var PCUIF_InfoTrxTs ts := info_ind.trx[i].ts[tn];
log("Checking timeslot #", tn, " of trx#", i, ": ", ts);
if (not match(ts, tr_ts)) {
setverdict(fail, "Hopping parameters do not match: ",
@ -5720,7 +5720,7 @@ testcase TC_pcu_info_ind_fh_params() runs on test_CT {
}
}
/* Verify IPv4 NSVC address in the INFO.ind message (version >= 10) */
/* Verify IPv4 NSVC address in the INFO.ind message */
testcase TC_pcu_socket_nsvc_ipv4() runs on test_CT {
f_init_vty_bsc();
f_vty_config2(BSCVTY, {"network", "bts 0"} , "gprs nsvc 0 remote ip 127.127.127.127");
@ -5729,23 +5729,19 @@ testcase TC_pcu_socket_nsvc_ipv4() runs on test_CT {
f_init();
var PCUIF_RemoteAddr remote_addr := g_pcu_last_info.u.info_ind.remote_addr;
if (not ischosen(remote_addr.v10)) {
Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
log2str("Unexpected remote_addr: ", remote_addr));
}
var template PCUIF_RemoteAddr tr_remote_addr := {
addr_type := { PCUIF_ADDR_TYPE_IPV4, ? },
addr := { f_inet_addr("127.127.127.127"), ? }
};
if (remote_addr.v10.addr_type[0] != PCUIF_ADDR_TYPE_IPV4) {
setverdict(fail, "Received address family is not IPv4");
}
if (substr(remote_addr.v10.addr[0], 0, 4) != f_inet_addr("127.127.127.127")) {
setverdict(fail, "Unexpected address: ", remote_addr.v10.addr[0]);
if (not match(remote_addr, tr_remote_addr)) {
setverdict(fail, "NSVC address ", remote_addr, " does not match ", tr_remote_addr);
}
setverdict(pass);
}
/* Verify IPv4 NSVC address in the INFO.ind message (version >= 10) */
/* Verify IPv4 NSVC address in the INFO.ind message */
testcase TC_pcu_socket_nsvc_ipv6() runs on test_CT {
f_init_vty_bsc();
f_vty_config2(BSCVTY, {"network", "bts 0"} , "gprs nsvc 0 remote ip fd00::ca:ff:ee");
@ -5753,17 +5749,13 @@ testcase TC_pcu_socket_nsvc_ipv6() runs on test_CT {
f_init();
var PCUIF_RemoteAddr remote_addr := g_pcu_last_info.u.info_ind.remote_addr;
if (not ischosen(remote_addr.v10)) {
Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
log2str("Unexpected remote_addr: ", remote_addr));
}
var template PCUIF_RemoteAddr tr_remote_addr := {
addr_type := { PCUIF_ADDR_TYPE_IPV6, ? },
addr := { f_inet6_addr("fd00::ca:ff:ee"), ? }
};
if (remote_addr.v10.addr_type[0] != PCUIF_ADDR_TYPE_IPV6) {
setverdict(fail, "Received address family is not IPv6");
}
if (remote_addr.v10.addr[0] != f_inet6_addr("fd00::ca:ff:ee")) {
setverdict(fail, "Unexpected address: ", remote_addr.v10.addr[0]);
if (not match(remote_addr, tr_remote_addr)) {
setverdict(fail, "NSVC address ", remote_addr, " does not match ", tr_remote_addr);
}
setverdict(pass);
@ -5779,7 +5771,7 @@ runs on ConnHdlr {
var PCUIF_send_data sd;
[] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {
var BIT8 pdch_mask := f_PCUIF_ver_INFO_PDCHMask_get(sd.data.u.info_ind, trx_nr);
var BIT8 pdch_mask := sd.data.u.info_ind.trx[trx_nr].pdch_mask;
if (substr(pdch_mask, g_chan_nr.tn, 1) != exp) {
repeat;
}
@ -7358,12 +7350,9 @@ control {
execute( TC_dyn_osmo_pdch_double_act() );
execute( TC_dyn_ipa_pdch_act_deact() );
execute( TC_dyn_ipa_pdch_act_tchf_act_nack() );
if (PCUIF_Types.mp_pcuif_version >= 10) {
execute( TC_pcu_info_ind_fh_params() );
execute( TC_pcu_socket_nsvc_ipv4() );
execute( TC_pcu_socket_nsvc_ipv6() );
}
execute( TC_pcu_info_ind_fh_params() );
execute( TC_pcu_socket_nsvc_ipv4() );
execute( TC_pcu_socket_nsvc_ipv6() );
} else {
log("PCU socket path not available, skipping PCU tests");
}

View File

@ -153,30 +153,14 @@ type record PCUIF_InfoTrxTs {
} with { variant (ma) "BYTEORDER(first), BITORDER(msb)" };
private type record length(8) of PCUIF_InfoTrxTs PCUIF_InfoTrxTsList;
/* Version >= 10 specific coding */
private type record PCUIF_InfoV10Trx {
private type record PCUIF_InfoTrx {
uint16_t arfcn,
BIT8 pdch_mask,
OCT1 spare,
uint32_t hLayer1,
PCUIF_InfoTrxTsList ts
} with { variant (pdch_mask) "BITORDER(msb)" };
type record length(8) of PCUIF_InfoV10Trx PCUIF_InfoV10TrxList;
/* Version <= 9 specific coding */
private type record PCUIF_InfoV09Trx {
uint16_t arfcn,
BIT8 pdch_mask,
OCT1 spare,
OCT8 tsc,
uint32_t hLayer1
} with { variant (pdch_mask) "BITORDER(msb)" };
private type record length(8) of PCUIF_InfoV09Trx PCUIF_InfoV09TrxList;
type union PCUIF_InfoTrxs {
PCUIF_InfoV09TrxList v09,
PCUIF_InfoV10TrxList v10
} with { variant "" };
type record length(8) of PCUIF_InfoTrx PCUIF_InfoTrxs;
type record PCUIF_info_ind {
uint32_t version,
@ -216,20 +200,6 @@ type record PCUIF_info_ind {
record length(2) of uint16_t local_port,
record length(2) of uint16_t remote_port,
PCUIF_RemoteAddr remote_addr
} with {
/* NOTE: TITAN is not smart enough to handle 'version < 10' and 'version > 9',
* so we cannot support more than two versions at the same time here. Sigh. */
variant (trx) "CROSSTAG(v09, version = 9; v10, version = 10)"
variant (remote_addr) "CROSSTAG(v09, version = 9; v10, version = 10)"
};
type union PCUIF_RemoteAddr {
PCUIF_RemoteAddrV09 v09,
PCUIF_RemoteAddrV10 v10
} with { variant "" };
type record PCUIF_RemoteAddrV09 {
record length(2) of OCT4 addr
} with { variant "" };
type enumerated PCUIF_AddrType {
@ -238,7 +208,7 @@ type enumerated PCUIF_AddrType {
PCUIF_ADDR_TYPE_IPV6 ('29'O)
} with { variant "FIELDLENGTH(8)" };
type record PCUIF_RemoteAddrV10 {
type record PCUIF_RemoteAddr {
record length(2) of PCUIF_AddrType addr_type,
record length(2) of octetstring addr length(16)
} with { variant "" };
@ -822,9 +792,10 @@ template PCUIF_InfoTrxTs tr_PCUIF_InfoTrxTsH1(template uint3_t tsc := ?,
ma := ma
};
template (value) PCUIF_InfoV10Trx ts_PCUIF_InfoV10Trx(template (value) uint16_t arfcn := 871,
template (value) BIT8 pdch_mask := '00000001'B,
template (value) uint3_t tsc := 7) := {
template (value) PCUIF_InfoTrx
ts_PCUIF_InfoTrx(template (value) uint16_t arfcn := 871,
template (value) BIT8 pdch_mask := '00000001'B,
template (value) uint3_t tsc := 7) := {
arfcn := arfcn,
pdch_mask := pdch_mask,
spare := '00'O,
@ -837,34 +808,16 @@ template (value) PCUIF_InfoV10Trx ts_PCUIF_InfoV10Trx(template (value) uint16_t
}
};
template (value) PCUIF_InfoV09Trx ts_PCUIF_InfoV09Trx(template (value) uint16_t arfcn := 871,
template (value) BIT8 pdch_mask := '00000001'B,
OCT1 tsc := '07'O) := {
arfcn := arfcn,
pdch_mask := pdch_mask,
spare := '00'O,
tsc := tsc & tsc & tsc & tsc & tsc & tsc & tsc & tsc,
hLayer1 := 0
}
template (value) PCUIF_InfoV09Trx ts_PCUIF_InfoV09TrxNULL := ts_PCUIF_InfoV09Trx(0, '00000000'B, '00'O);
template (value) PCUIF_InfoTrxs ts_PCUIF_InfoV09Trxs_def(uint16_t base_arfcn) := {
v09 := {
ts_PCUIF_InfoV09Trx(arfcn := base_arfcn + 0), ts_PCUIF_InfoV09TrxNULL,
ts_PCUIF_InfoV09TrxNULL, ts_PCUIF_InfoV09TrxNULL,
ts_PCUIF_InfoV09TrxNULL, ts_PCUIF_InfoV09TrxNULL,
ts_PCUIF_InfoV09TrxNULL, ts_PCUIF_InfoV09TrxNULL
}
};
template (value) PCUIF_InfoTrxs ts_PCUIF_InfoV10Trxs_def(uint16_t base_arfcn) := {
v10 := {
ts_PCUIF_InfoV10Trx(arfcn := base_arfcn + 0), ts_PCUIF_InfoV10Trx(arfcn := base_arfcn + 1),
ts_PCUIF_InfoV10Trx(arfcn := base_arfcn + 2), ts_PCUIF_InfoV10Trx(arfcn := base_arfcn + 3),
ts_PCUIF_InfoV10Trx(arfcn := base_arfcn + 4), ts_PCUIF_InfoV10Trx(arfcn := base_arfcn + 5),
ts_PCUIF_InfoV10Trx(arfcn := base_arfcn + 6), ts_PCUIF_InfoV10Trx(arfcn := base_arfcn + 7)
}
template (value) PCUIF_InfoTrxs
ts_PCUIF_InfoTrxs_def(uint16_t base_arfcn) := {
ts_PCUIF_InfoTrx(arfcn := base_arfcn + 0),
ts_PCUIF_InfoTrx(arfcn := base_arfcn + 1),
ts_PCUIF_InfoTrx(arfcn := base_arfcn + 2),
ts_PCUIF_InfoTrx(arfcn := base_arfcn + 3),
ts_PCUIF_InfoTrx(arfcn := base_arfcn + 4),
ts_PCUIF_InfoTrx(arfcn := base_arfcn + 5),
ts_PCUIF_InfoTrx(arfcn := base_arfcn + 6),
ts_PCUIF_InfoTrx(arfcn := base_arfcn + 7)
};
template (value) PCUIF_Message ts_PCUIF_INFO_IND(template (value) uint8_t bts_nr,
@ -1005,39 +958,12 @@ template (present) PCUIF_Message tr_PCUIF_APP_INFO_REQ(template (present) uint8_
}
/* TODO: remove this as soon as we drop version 9 support */
function f_PCUIF_ver_INFO_Trxs(uint16_t base_arfcn)
return PCUIF_InfoTrxs {
if (PCUIF_Types.mp_pcuif_version >= 10) {
return valueof(ts_PCUIF_InfoV10Trxs_def(base_arfcn));
} else {
return valueof(ts_PCUIF_InfoV09Trxs_def(base_arfcn));
}
}
function f_PCUIF_ver_INFO_PDCHMask_get(in PCUIF_info_ind info, uint8_t trx_nr)
return BIT8 {
if (PCUIF_Types.mp_pcuif_version >= 10) {
return info.trx.v10[trx_nr].pdch_mask;
} else {
return info.trx.v09[trx_nr].pdch_mask;
}
}
function f_PCUIF_ver_INFO_PDCHMask_set(inout PCUIF_info_ind info, BIT8 pdch_mask,
template (present) uint8_t trx_nr := ?)
function f_PCUIF_PDCHMask_set(inout PCUIF_info_ind info, BIT8 pdch_mask,
template (present) uint8_t trx_nr := ?)
{
if (PCUIF_Types.mp_pcuif_version >= 10) {
for (var integer nr := 0; nr < lengthof(info.trx.v10); nr := nr + 1) {
if (match(nr, trx_nr)) {
info.trx.v10[nr].pdch_mask := pdch_mask;
}
}
} else {
for (var integer nr := 0; nr < lengthof(info.trx.v09); nr := nr + 1) {
if (match(nr, trx_nr)) {
info.trx.v09[nr].pdch_mask := pdch_mask;
}
for (var integer nr := 0; nr < lengthof(info.trx); nr := nr + 1) {
if (match(nr, trx_nr)) {
info.trx[nr].pdch_mask := pdch_mask;
}
}
}
@ -1054,31 +980,21 @@ return PCUIF_AddrType {
}
/* TODO: second (redundant) NSVC connection is not (yet) supported */
function f_PCUIF_ver_INFO_RemoteAddr(PCUIF_AddrType addr_type,
charstring addr)
function f_PCUIF_RemoteAddr(PCUIF_AddrType addr_type,
charstring addr_str)
return PCUIF_RemoteAddr {
var PCUIF_RemoteAddr remote_addr;
if (PCUIF_Types.mp_pcuif_version >= 10) {
remote_addr.v10.addr_type[0] := addr_type;
if (addr_type == PCUIF_ADDR_TYPE_IPV4) {
remote_addr.v10.addr[0] := f_inet_addr(addr);
} else {
remote_addr.v10.addr[0] := f_inet6_addr(addr);
}
remote_addr.v10.addr_type[1] := PCUIF_ADDR_TYPE_UNSPEC;
remote_addr.v10.addr[1] := f_pad_oct(''O, 16, '00'O);
remote_addr.addr_type[0] := addr_type;
if (addr_type == PCUIF_ADDR_TYPE_IPV4) {
remote_addr.addr[0] := f_inet_addr(addr_str);
} else {
if (addr_type != PCUIF_ADDR_TYPE_IPV4) {
testcase.stop("NSVC address type := ", addr_type,
"is not supported in version := ",
PCUIF_Types.mp_pcuif_version);
}
/* v9 requires the IP in host byte order */
remote_addr.v09.addr[0] := f_inet_haddr(addr);
remote_addr.v09.addr[1] := f_pad_oct(''O, 4, '00'O);
remote_addr.addr[0] := f_inet6_addr(addr_str);
}
remote_addr.addr_type[1] := PCUIF_ADDR_TYPE_UNSPEC;
remote_addr.addr[1] := f_pad_oct(''O, 16, '00'O);
return remote_addr;
}

View File

@ -350,19 +350,18 @@ private function f_tx_first_data_ind(integer bts_nr, PCUIF_info_ind info_ind, in
runs on RAW_PCU_BTS_CT
{
var PCUIF_Message pcu_msg;
var PCUIF_InfoV10TrxList trx_list := g_info_ind.trx.v10;
/* Find an active TS: */
for (var uint8_t ts_nr := 0; ts_nr < 8; ts_nr := ts_nr + 1) {
for (var integer trx_nr := 0; trx_nr < lengthof(trx_list); trx_nr := trx_nr + 1) {
if (trx_list[trx_nr].pdch_mask[ts_nr] == '0'B) {
for (var integer trx_nr := 0; trx_nr < lengthof(g_info_ind.trx); trx_nr := trx_nr + 1) {
if (g_info_ind.trx[trx_nr].pdch_mask[ts_nr] == '0'B) {
continue; /* TRX+TS not activated */
}
/* Send empty DATA.ind to set up FN */
pcu_msg := valueof(ts_PCUIF_DATA_IND(bts_nr, trx_nr, ts_nr, 0 /* FIXME */,
PCU_IF_SAPI_PDTCH, ''O, start_fn,
trx_list[trx_nr].arfcn,
g_info_ind.trx[trx_nr].arfcn,
rssi := -80, ber10k := 0,
ta_offs_qbits := 0, lqual_cb := 10));
PCUIF.send(pcu_msg);
@ -377,12 +376,11 @@ runs on RAW_PCU_BTS_CT
{
var PCUIF_Message pcu_msg;
var boolean has_msg, use_msg;
var PCUIF_InfoV10TrxList trx_list := g_info_ind.trx.v10;
for (var uint8_t ts_nr := 0; ts_nr < 8; ts_nr := ts_nr + 1) {
for (var integer trx_nr := 0; trx_nr < lengthof(trx_list); trx_nr := trx_nr + 1) {
for (var integer trx_nr := 0; trx_nr < lengthof(g_info_ind.trx); trx_nr := trx_nr + 1) {
//var charstring prefix := "BTS=" & int2str(bts_nr) & ",TRX=" & int2str(trx_nr) & ",TS=" & int2str(ts_nr) & ",FN=" & int2str(fn) & ": ";
if (trx_list[trx_nr].pdch_mask[ts_nr] == '0'B) {
if (g_info_ind.trx[trx_nr].pdch_mask[ts_nr] == '0'B) {
//log(prefix, "disabled");
continue; /* TRX+TS not activated */
}
@ -406,7 +404,7 @@ runs on RAW_PCU_BTS_CT
/* NOPE.ind: */
pcu_msg := valueof(ts_PCUIF_DATA_IND(bts_nr, trx_nr, ts_nr, 0 /* FIXME */,
PCU_IF_SAPI_PDTCH, ''O, fn,
trx_list[trx_nr].arfcn,
g_info_ind.trx[trx_nr].arfcn,
rssi := -80, ber10k := 0,
ta_offs_qbits := 0, lqual_cb := 10));
//log(prefix, "DATA.ind (len=0)");

View File

@ -79,7 +79,7 @@ friend template (value) PCUIF_info_ind ts_PCUIF_INFO_default(template (value) PC
:= {
version := PCUIF_Types.mp_pcuif_version,
flags := flags,
trx := f_PCUIF_ver_INFO_Trxs(GPRS_Components.mp_base_arfcn),
trx := ts_PCUIF_InfoTrxs_def(GPRS_Components.mp_base_arfcn),
bsic := 7,
mcc := 262,
mnc := 42,
@ -109,7 +109,7 @@ friend template (value) PCUIF_info_ind ts_PCUIF_INFO_default(template (value) PC
nsvci := { mp_nsconfig.nsvc[0].nsvci, 0 },
local_port := { mp_nsconfig.nsvc[0].provider.ip.remote_udp_port, 0 },
remote_port := { mp_nsconfig.nsvc[0].provider.ip.local_udp_port, 0 },
remote_addr := f_PCUIF_ver_INFO_RemoteAddr(
remote_addr := f_PCUIF_RemoteAddr(
f_PCUIF_AF2addr_type(mp_nsconfig.nsvc[0].provider.ip.address_family), mp_nsconfig.nsvc[0].provider.ip.local_ip)
}
@ -2644,8 +2644,8 @@ testcase TC_dl_multislot_tbf_ms_class_from_sgsn() runs on RAW_PCU_Test_CT {
ms := g_ms[0]; /* We only use first MS in this test */
/* Only 1 TRX with 8 PDCH */
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '11111111'B, 0);
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '00000000'B, (1 .. 7));
f_PCUIF_PDCHMask_set(info_ind, '11111111'B, 0);
f_PCUIF_PDCHMask_set(info_ind, '00000000'B, (1 .. 7));
/* Initialize the PCU interface abstraction */
f_init_raw(testcasename(), info_ind);
@ -2703,8 +2703,8 @@ testcase TC_dl_multislot_tbf_ms_class_from_2phase() runs on RAW_PCU_Test_CT {
ms := g_ms[0]; /* We only use first MS in this test */
/* Only 1 TRX with 8 PDCH */
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '11111111'B, 0);
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '00000000'B, (1 .. 7));
f_PCUIF_PDCHMask_set(info_ind, '11111111'B, 0);
f_PCUIF_PDCHMask_set(info_ind, '00000000'B, (1 .. 7));
/* Initialize the PCU interface abstraction */
f_init_raw(testcasename(), info_ind);
@ -2752,8 +2752,8 @@ testcase TC_ul_multislot_tbf_ms_class_from_2phase() runs on RAW_PCU_Test_CT {
ms := g_ms[0]; /* We only use first MS in this test */
/* Only 1 TRX with 8 PDCH */
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '11111111'B, 0);
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '00000000'B, (1 .. 7));
f_PCUIF_PDCHMask_set(info_ind, '11111111'B, 0);
f_PCUIF_PDCHMask_set(info_ind, '00000000'B, (1 .. 7));
/* Initialize the PCU interface abstraction */
f_init_raw(testcasename(), info_ind);
@ -3378,8 +3378,8 @@ testcase TC_egprs_pkt_chan_req_reject_exhaustion() runs on RAW_PCU_Test_CT {
info_ind := valueof(ts_PCUIF_INFO_default);
/* Only the first TRX is enabled. */
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '00000000'B, (1 .. 7));
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '00000001'B, 0);
f_PCUIF_PDCHMask_set(info_ind, '00000000'B, (1 .. 7));
f_PCUIF_PDCHMask_set(info_ind, '00000001'B, 0);
/* Initialize the PCU interface abstraction */
f_init_raw(testcasename(), info_ind);
@ -3425,7 +3425,7 @@ private function f_TC_pcuif_fh_check_imm_ass(in PCUIF_info_ind info_ind,
in GsmRrMessage rr_msg)
{
var ImmediateAssignment ia := rr_msg.payload.imm_ass;
var PCUIF_InfoTrxTs ts := info_ind.trx.v10[0].ts[ia.pkt_chan_desc.tn];
var PCUIF_InfoTrxTs ts := info_ind.trx[0].ts[ia.pkt_chan_desc.tn];
var template PacketChannelDescription tr_pkt_chan_desc := {
channel_Type_spare := ?,
@ -3465,7 +3465,7 @@ testcase TC_pcuif_fh_imm_ass_ul_egprs() runs on RAW_PCU_Test_CT {
var GprsMS ms := valueof(t_GprsMS_def);
/* Enable frequency hopping on TRX0/TS7 */
info_ind.trx.v10[0].ts[7] := f_TC_pcuif_fh_params_gen(32);
info_ind.trx[0].ts[7] := f_TC_pcuif_fh_params_gen(32);
/* Initialize the PCU interface abstraction */
f_init_raw(testcasename(), info_ind);
@ -3486,7 +3486,7 @@ testcase TC_pcuif_fh_imm_ass_ul() runs on RAW_PCU_Test_CT {
var GprsMS ms := valueof(t_GprsMS_def);
/* Enable frequency hopping on TRX0/TS7 */
info_ind.trx.v10[0].ts[7] := f_TC_pcuif_fh_params_gen(32);
info_ind.trx[0].ts[7] := f_TC_pcuif_fh_params_gen(32);
/* Initialize the PCU interface abstraction */
f_init_raw(testcasename(), info_ind);
@ -3504,7 +3504,7 @@ testcase TC_pcuif_fh_imm_ass_dl() runs on RAW_PCU_Test_CT {
var GprsMS ms := valueof(t_GprsMS_def);
/* Enable frequency hopping on TRX0/TS7 */
info_ind.trx.v10[0].ts[7] := f_TC_pcuif_fh_params_gen(16);
info_ind.trx[0].ts[7] := f_TC_pcuif_fh_params_gen(16);
/* Initialize NS/BSSGP side */
f_init_bssgp();
@ -3528,7 +3528,7 @@ private function f_TC_pcuif_fh_check_pkt_ass(in PCUIF_info_ind info_ind,
in FrequencyParameters fp)
{
/* FIXME: TRX0/TS7 is a hard-coded expectation, make it configurable */
var PCUIF_InfoTrxTs ts := info_ind.trx.v10[0].ts[7];
var PCUIF_InfoTrxTs ts := info_ind.trx[0].ts[7];
/* Table 12.8.1: Frequency Parameters information elements */
var template FrequencyParameters tr_fp := {
@ -3566,7 +3566,7 @@ testcase TC_pcuif_fh_pkt_ass_ul() runs on RAW_PCU_Test_CT {
var uint32_t poll_fn;
/* Enable frequency hopping on TRX0/TS7 */
info_ind.trx.v10[0].ts[7] := f_TC_pcuif_fh_params_gen(33);
info_ind.trx[0].ts[7] := f_TC_pcuif_fh_params_gen(33);
/* Initialize the PCU interface abstraction */
f_init_raw(testcasename(), info_ind);
@ -3608,7 +3608,7 @@ testcase TC_pcuif_fh_pkt_ass_dl() runs on RAW_PCU_Test_CT {
var uint32_t poll_fn;
/* Enable frequency hopping on TRX0/TS7 */
info_ind.trx.v10[0].ts[7] := f_TC_pcuif_fh_params_gen(33);
info_ind.trx[0].ts[7] := f_TC_pcuif_fh_params_gen(33);
/* Initialize NS/BSSGP side */
f_init_bssgp();
@ -3678,10 +3678,10 @@ testcase TC_multitrx_multims_alloc() runs on RAW_PCU_Test_CT {
info_ind := valueof(ts_PCUIF_INFO_default(c_PCUIF_Flags_noMCS));
/* Only the 3 first TRX are enabled. The enabled ones all have same
amount of resources, hence same amount of initial resources. */
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '00000000'B, (3 .. 7));
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '00000011'B, 0);
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '00001100'B, 1);
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '11000000'B, 2);
f_PCUIF_PDCHMask_set(info_ind, '00000000'B, (3 .. 7));
f_PCUIF_PDCHMask_set(info_ind, '00000011'B, 0);
f_PCUIF_PDCHMask_set(info_ind, '00001100'B, 1);
f_PCUIF_PDCHMask_set(info_ind, '11000000'B, 2);
/* Initialize the PCU interface abstraction */
f_init_raw(testcasename(), info_ind);
@ -3695,9 +3695,9 @@ testcase TC_multitrx_multims_alloc() runs on RAW_PCU_Test_CT {
/* Check if all TBFs are allocated on different TRX in an uniform way */
for (i := 0; i < num_ms; i := i + 1) {
if (g_ms[i].ul_tbf.arfcn != info_ind.trx.v10[i mod 3].arfcn) {
if (g_ms[i].ul_tbf.arfcn != info_ind.trx[i mod 3].arfcn) {
setverdict(fail, "Got assigned ARFCN ", g_ms[i].ul_tbf.arfcn,
" vs exp ", info_ind.trx.v10[i mod 3].arfcn);
" vs exp ", info_ind.trx[i mod 3].arfcn);
f_shutdown(__BFILE__, __LINE__);
}
}
@ -3728,8 +3728,8 @@ testcase TC_multiplex_dl_gprs_egprs() runs on RAW_PCU_Test_CT {
info_ind := valueof(ts_PCUIF_INFO_default);
/* Only use 1 PDCH to make sure both end up in the same slot: */
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '00000001'B, 0);
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, '00000000'B, (1 .. 7));
f_PCUIF_PDCHMask_set(info_ind, '00000001'B, 0);
f_PCUIF_PDCHMask_set(info_ind, '00000000'B, (1 .. 7));
/* Initialize the PCU interface abstraction */
f_init_raw(testcasename(), info_ind);
@ -3929,7 +3929,7 @@ runs on RAW_PCU_Test_CT {
f_init_bssgp();
/* Explicitly set the given PDCH slot-mask to all transceivers */
f_PCUIF_ver_INFO_PDCHMask_set(info_ind, pdch_mask);
f_PCUIF_PDCHMask_set(info_ind, pdch_mask);
/* Allocate 56 GprsMS instances (maximum for 8 PDCH slots) */
f_init_gprs_ms(7 * 8);
@ -5679,20 +5679,18 @@ control {
execute( TC_mo_ping_pong_with_ul_racap_egprs_only() );
/* Frequency hopping specific test cases */
if (PCUIF_Types.mp_pcuif_version >= 10) {
/* Immediate Assignment on AGCH/PCH */
execute( TC_pcuif_fh_imm_ass_ul_egprs() );
execute( TC_pcuif_fh_imm_ass_ul() );
execute( TC_pcuif_fh_imm_ass_dl() );
/* Packet Uplink/Downlink Assignment on PACCH */
execute( TC_pcuif_fh_pkt_ass_ul() );
execute( TC_pcuif_fh_pkt_ass_dl() );
execute( TC_multitrx_multims_alloc() );
execute( TC_dl_multislot_tbf_ms_class_from_sgsn() );
execute( TC_dl_multislot_tbf_ms_class_from_2phase() );
execute( TC_ul_multislot_tbf_ms_class_from_2phase() );
}
/* Immediate Assignment on AGCH/PCH */
execute( TC_pcuif_fh_imm_ass_ul_egprs() );
execute( TC_pcuif_fh_imm_ass_ul() );
execute( TC_pcuif_fh_imm_ass_dl() );
/* Packet Uplink/Downlink Assignment on PACCH */
execute( TC_pcuif_fh_pkt_ass_ul() );
execute( TC_pcuif_fh_pkt_ass_dl() );
execute( TC_multitrx_multims_alloc() );
execute( TC_dl_multislot_tbf_ms_class_from_sgsn() );
execute( TC_dl_multislot_tbf_ms_class_from_2phase() );
execute( TC_ul_multislot_tbf_ms_class_from_2phase() );
execute( TC_multiplex_dl_gprs_egprs() );
execute( TC_pcuif_info_ind_subsequent() );