|
|
|
@ -97,7 +97,7 @@ friend template (value) PCUIF_info_ind ts_PCUIF_INFO_default(template (value) PC |
|
|
|
|
dl_tbf_ext := 250 * 10, /* ms */ |
|
|
|
|
ul_tbf_ext := 250 * 10, /* ms */ |
|
|
|
|
initial_cs := 2, |
|
|
|
|
initial_mcs := 6, |
|
|
|
|
initial_mcs := 1, |
|
|
|
|
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 }, |
|
|
|
@ -1085,7 +1085,7 @@ testcase TC_countdown_procedure() runs on RAW_PCU_Test_CT { |
|
|
|
|
|
|
|
|
|
/* Send one UL block (with TLLI since we are in One-Phase Access |
|
|
|
|
contention resoultion) and make sure it is ACKED fine. */ |
|
|
|
|
total_payload := f_rnd_octstring(16); /* 16 bytes fills the llc block (because TLLI takes 4 bytes) */ |
|
|
|
|
total_payload := f_rnd_octstring(f_ultbf_payload_fill_length(ms.ul_tbf, true)); |
|
|
|
|
/* Set CV = 15 to signal there's still more than BS_CV_MAX blocks to be sent */ |
|
|
|
|
f_ms_tx_ul_data_block(ms, total_payload, cv := 15, with_tlli := true) |
|
|
|
|
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, sched_fn); |
|
|
|
@ -1114,6 +1114,8 @@ testcase TC_ul_all_sizes() runs on RAW_PCU_Test_CT { |
|
|
|
|
var template (value) RlcmacUlBlock ul_data; |
|
|
|
|
var template (value) LlcBlockHdr blk_hdr; |
|
|
|
|
var template (value) LlcBlocks blocks; |
|
|
|
|
var integer blk_len; |
|
|
|
|
var CodingScheme tx_cs; |
|
|
|
|
var GprsMS ms; |
|
|
|
|
|
|
|
|
|
/* Initialize NS/BSSGP side */ |
|
|
|
@ -1139,7 +1141,8 @@ testcase TC_ul_all_sizes() runs on RAW_PCU_Test_CT { |
|
|
|
|
more := false, e := true); |
|
|
|
|
blocks := { t_RLCMAC_LLCBLOCK(payload, blk_hdr) }; |
|
|
|
|
/* Set CV = 15 to signal there's still more than BS_CV_MAX blocks to be sent */ |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA_TLLI(tfi := ms.ul_tbf.tfi, |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA_TLLI(cs := ms.ul_tbf.tx_cs_mcs, |
|
|
|
|
tfi := ms.ul_tbf.tfi, |
|
|
|
|
cv := 15, |
|
|
|
|
bsn := ms.ul_tbf.bsn, |
|
|
|
|
blocks := blocks, |
|
|
|
@ -1166,12 +1169,15 @@ testcase TC_ul_all_sizes() runs on RAW_PCU_Test_CT { |
|
|
|
|
cv := max_size - i; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
blk_len := 3 + 1 + i; /* 3 Header bytes + LI byte + payload length */ |
|
|
|
|
tx_cs := f_rlcmac_block_len_required_cs_mcs(blk_len, false); |
|
|
|
|
payload := f_rnd_octstring(i); |
|
|
|
|
blk_hdr := t_RLCMAC_LLCBLOCK_HDR(length_ind := lengthof(payload), |
|
|
|
|
more := false, e := true); |
|
|
|
|
blocks := { t_RLCMAC_LLCBLOCK(payload, blk_hdr) }; |
|
|
|
|
/* Set CV = 15 to signal there's still more than BS_CV_MAX blocks to be sent */ |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA(tfi := ms.ul_tbf.tfi, |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA(cs := tx_cs, |
|
|
|
|
tfi := ms.ul_tbf.tfi, |
|
|
|
|
cv := cv, |
|
|
|
|
bsn := ms.ul_tbf.bsn, |
|
|
|
|
blocks := blocks); |
|
|
|
@ -1218,7 +1224,8 @@ function f_TC_ul_data_toolong_fills_padding_cs(inout GprsMS ms, CodingScheme cs, |
|
|
|
|
blk_hdr := t_RLCMAC_LLCBLOCK_HDR(length_ind := lengthof(payload), |
|
|
|
|
more := false, e := true); |
|
|
|
|
blocks := { t_RLCMAC_LLCBLOCK(payload, blk_hdr) }; |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA_TLLI(tfi := ms.ul_tbf.tfi, |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA_TLLI(cs := cs, |
|
|
|
|
tfi := ms.ul_tbf.tfi, |
|
|
|
|
cv := cv, |
|
|
|
|
bsn := ms.ul_tbf.bsn, |
|
|
|
|
blocks := blocks, |
|
|
|
@ -1368,7 +1375,7 @@ runs on RAW_PCU_Test_CT { |
|
|
|
|
|
|
|
|
|
/* Send one UL block (without TLLI since we are in Second-Phase Access) |
|
|
|
|
and make sure it is ACKED fine */ |
|
|
|
|
f_ms_tx_ul_data_block_multi(ms, 1, with_tlli := true); /* TODO: send using cs_mcs */ |
|
|
|
|
f_ms_tx_ul_data_block_multi(ms, 1, with_tlli := true); |
|
|
|
|
|
|
|
|
|
/* DL ACK/NACK sets poll+rrbp requesting PACKET CONTROL ACK */ |
|
|
|
|
f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts); |
|
|
|
@ -1524,6 +1531,7 @@ testcase TC_ul_intermediate_retrans() runs on RAW_PCU_Test_CT { |
|
|
|
|
var octetstring lost_payload; |
|
|
|
|
var uint5_t tfi; |
|
|
|
|
var GprsMS ms; |
|
|
|
|
var uint32_t payload_fill_len; |
|
|
|
|
|
|
|
|
|
/* Initialize NS/BSSGP side */ |
|
|
|
|
f_init_bssgp(); |
|
|
|
@ -1544,7 +1552,7 @@ testcase TC_ul_intermediate_retrans() runs on RAW_PCU_Test_CT { |
|
|
|
|
|
|
|
|
|
/* Send one UL block (with TLLI since we are in One-Phase Access |
|
|
|
|
contention resoultion) and make sure it is ACKED fine. */ |
|
|
|
|
payload := f_rnd_octstring(16); /* 16 bytes fills the llc block (because TLLI takes 4 bytes) */ |
|
|
|
|
payload := f_rnd_octstring(f_ultbf_payload_fill_length(ms.ul_tbf, true)); /* 16 bytes fills the llc block (because TLLI takes 4 bytes) */ |
|
|
|
|
f_ms_tx_ul_data_block(ms, payload, cv := 15, with_tlli := true); |
|
|
|
|
|
|
|
|
|
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, sched_fn); |
|
|
|
@ -1552,20 +1560,22 @@ testcase TC_ul_intermediate_retrans() runs on RAW_PCU_Test_CT { |
|
|
|
|
f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), sched_fn); |
|
|
|
|
total_payload := payload; |
|
|
|
|
|
|
|
|
|
payload_fill_len := f_ultbf_payload_fill_length(ms.ul_tbf); |
|
|
|
|
|
|
|
|
|
/* Send 2 packets, skip 1 (inc bsn) and send another one */ |
|
|
|
|
payload := f_rnd_octstring(20); /* 20 bytes fills the CS-1 llc block */ |
|
|
|
|
payload := f_rnd_octstring(payload_fill_len); |
|
|
|
|
f_ms_tx_ul_data_block(ms, payload, cv := 15); |
|
|
|
|
total_payload := total_payload & payload; |
|
|
|
|
|
|
|
|
|
payload := f_rnd_octstring(20); /* 20 bytes fills the CS-1 llc block */ |
|
|
|
|
payload := f_rnd_octstring(payload_fill_len); |
|
|
|
|
f_ms_tx_ul_data_block(ms, payload, cv := 15); |
|
|
|
|
total_payload := total_payload & payload; |
|
|
|
|
|
|
|
|
|
lost_payload := f_rnd_octstring(20); |
|
|
|
|
lost_payload := f_rnd_octstring(payload_fill_len); |
|
|
|
|
ms.ul_tbf.bsn := ms.ul_tbf.bsn + 1; /* LOST PAYLOAD bsn=3, will be retransmitted, next bsn is increased +2 */ |
|
|
|
|
total_payload := total_payload & lost_payload; |
|
|
|
|
|
|
|
|
|
payload := f_rnd_octstring(20); /* 20 bytes fills the CS-1 llc block */ |
|
|
|
|
payload := f_rnd_octstring(payload_fill_len) |
|
|
|
|
f_ms_tx_ul_data_block(ms, payload, cv := 15); |
|
|
|
|
total_payload := total_payload & payload; |
|
|
|
|
|
|
|
|
@ -1575,7 +1585,11 @@ testcase TC_ul_intermediate_retrans() runs on RAW_PCU_Test_CT { |
|
|
|
|
/* On CV=0, we'll receive a UL ACK asking about missing block */ |
|
|
|
|
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, sched_fn); |
|
|
|
|
/* TODO: check ack ack bitmap (URBB) */ |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA(tfi := tfi, cv := 15, bsn := 3, blocks := {t_RLCMAC_LLCBLOCK(lost_payload)}); |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA(cs := ms.ul_tbf.tx_cs_mcs, |
|
|
|
|
tfi := tfi, |
|
|
|
|
cv := 15, |
|
|
|
|
bsn := 3, |
|
|
|
|
blocks := {t_RLCMAC_LLCBLOCK(lost_payload)}); |
|
|
|
|
f_ms_tx_ul_block(ms, ul_data); |
|
|
|
|
|
|
|
|
|
/* Now final ack is recieved */ |
|
|
|
@ -1760,7 +1774,8 @@ testcase TC_ul_flow_multiple_llc_blocks() runs on RAW_PCU_Test_CT { |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
/* UL RlcDataBlock(dataA) [BSN=0, CV=3] */ |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA_TLLI(tfi := ms.ul_tbf.tfi, |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA_TLLI(cs := CS_1, |
|
|
|
|
tfi := ms.ul_tbf.tfi, |
|
|
|
|
cv := 3, |
|
|
|
|
bsn := ms.ul_tbf.bsn, |
|
|
|
|
blocks := { t_RLCMAC_LLCBLOCK(substr(dataA, 0, 16)) }, |
|
|
|
@ -1772,7 +1787,8 @@ testcase TC_ul_flow_multiple_llc_blocks() runs on RAW_PCU_Test_CT { |
|
|
|
|
f_ms_tx_ul_block(ms, ul_data); |
|
|
|
|
|
|
|
|
|
/* UL RlcDataBlock(dataA finished, dataB starts) [BSN=1, CV=2] */ |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA_TLLI(tfi := ms.ul_tbf.tfi, |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA_TLLI(cs := CS_1, |
|
|
|
|
tfi := ms.ul_tbf.tfi, |
|
|
|
|
cv := 2, |
|
|
|
|
bsn := ms.ul_tbf.bsn, |
|
|
|
|
blocks := { t_RLCMAC_LLCBLOCK(substr(dataA, 16, 4), |
|
|
|
@ -1787,7 +1803,8 @@ testcase TC_ul_flow_multiple_llc_blocks() runs on RAW_PCU_Test_CT { |
|
|
|
|
BSSGP[0].receive(tr_BSSGP_UL_UD(ms.tlli, mp_gb_cfg.bvc[0].cell_id, dataA)); |
|
|
|
|
|
|
|
|
|
/* UL RlcDataBlock(dataB finished, dataC starts and finishes, dataD starts) [BSN=2, CV=1] */ |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA_TLLI(tfi := ms.ul_tbf.tfi, |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA_TLLI(cs := CS_1, |
|
|
|
|
tfi := ms.ul_tbf.tfi, |
|
|
|
|
cv := 1, |
|
|
|
|
bsn := ms.ul_tbf.bsn, |
|
|
|
|
blocks := { t_RLCMAC_LLCBLOCK(substr(dataB, 11, 2), |
|
|
|
@ -1805,7 +1822,9 @@ testcase TC_ul_flow_multiple_llc_blocks() runs on RAW_PCU_Test_CT { |
|
|
|
|
BSSGP[0].receive(tr_BSSGP_UL_UD(ms.tlli, mp_gb_cfg.bvc[0].cell_id, dataC)); |
|
|
|
|
|
|
|
|
|
/* UL RlcDataBlock(dataD finishes) [BSN=3, CV=0] */ |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA_TLLI(tfi := ms.ul_tbf.tfi, |
|
|
|
|
ul_data := t_RLCMAC_UL_DATA_TLLI( |
|
|
|
|
cs := CS_1, |
|
|
|
|
tfi := ms.ul_tbf.tfi, |
|
|
|
|
cv := 0, |
|
|
|
|
bsn := ms.ul_tbf.bsn, |
|
|
|
|
blocks := { t_RLCMAC_LLCBLOCK(substr(dataD, 9, 3), |
|
|
|
|