pcu: Introduce helpers to update AckNackDescription
Change-Id: Ic62ab9e4a854239b95c434068543d95c5352f1c6
This commit is contained in:
parent
7503c872db
commit
8948633e8c
|
@ -574,6 +574,38 @@ runs on RAW_PCU_Test_CT {
|
||||||
BTS.receive(tr_RAW_PCU_EV(BTS_EV_SI13_NEGO));
|
BTS.receive(tr_RAW_PCU_EV(BTS_EV_SI13_NEGO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template AckNackDescription t_AckNackDescription_init := {
|
||||||
|
final_ack := '0'B,
|
||||||
|
starting_seq_nr := 0,
|
||||||
|
receive_block_bitmap := '0000000000000000000000000000000000000000000000000000000000000000'B
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TS 44.060 sec 12.3 Ack/Nack Description */
|
||||||
|
private function f_acknackdesc_ack_block(inout AckNackDescription desc, uint7_t bsn, BIT1 final_ack := '0'B)
|
||||||
|
{
|
||||||
|
var integer i;
|
||||||
|
var integer inc := bsn - desc.starting_seq_nr + 1;
|
||||||
|
/* Filling hole? */
|
||||||
|
if (bsn < desc.starting_seq_nr) {
|
||||||
|
desc.receive_block_bitmap[lengthof(desc.receive_block_bitmap) - (desc.starting_seq_nr - bsn)] := int2bit(1, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SSN is increased, and so RBB values need to be moved */
|
||||||
|
for (i := 0; i < lengthof(desc.receive_block_bitmap) - inc; i := i+1) {
|
||||||
|
desc.receive_block_bitmap[i] := desc.receive_block_bitmap[i + inc];
|
||||||
|
}
|
||||||
|
for (i := lengthof(desc.receive_block_bitmap) - inc; i < lengthof(desc.receive_block_bitmap) - 1; i := i+1) {
|
||||||
|
desc.receive_block_bitmap[i] := int2bit(0, 1);
|
||||||
|
}
|
||||||
|
/* Now we can set current bit and update SSN */
|
||||||
|
desc.starting_seq_nr := bsn + 1;
|
||||||
|
desc.receive_block_bitmap[lengthof(desc.receive_block_bitmap) - 1] := int2bit(1, 1);
|
||||||
|
|
||||||
|
/* Finally update the final_ack bit as requested: */
|
||||||
|
desc.final_ack := final_ack;
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME: properly encode RA (see TS 24.060, table 11.2.5.2) */
|
/* FIXME: properly encode RA (see TS 24.060, table 11.2.5.2) */
|
||||||
private function f_establish_tbf(out GsmRrMessage rr_imm_ass, uint8_t bts_nr := 0,
|
private function f_establish_tbf(out GsmRrMessage rr_imm_ass, uint8_t bts_nr := 0,
|
||||||
uint16_t ra := oct2int('3A'O), uint8_t is_11bit := 0,
|
uint16_t ra := oct2int('3A'O), uint8_t is_11bit := 0,
|
||||||
|
@ -765,7 +797,7 @@ runs on RAW_PCU_Test_CT {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function f_rx_rlcmac_dl_block_exp_data(out RlcmacDlBlock dl_block, out uint32_t ack_fn, octetstring data)
|
private function f_rx_rlcmac_dl_block_exp_data(out RlcmacDlBlock dl_block, out uint32_t ack_fn, octetstring data, template (present) uint7_t exp_bsn := ?)
|
||||||
runs on RAW_PCU_Test_CT {
|
runs on RAW_PCU_Test_CT {
|
||||||
var PCUIF_Message pcu_msg;
|
var PCUIF_Message pcu_msg;
|
||||||
var uint32_t dl_fn;
|
var uint32_t dl_fn;
|
||||||
|
@ -780,6 +812,11 @@ runs on RAW_PCU_Test_CT {
|
||||||
|
|
||||||
ack_fn := dl_fn + f_rrbp_fn_delay(dl_block.data.mac_hdr.mac_hdr.rrbp);
|
ack_fn := dl_fn + f_rrbp_fn_delay(dl_block.data.mac_hdr.mac_hdr.rrbp);
|
||||||
|
|
||||||
|
if (not match(dl_block.data.mac_hdr.hdr_ext.bsn, exp_bsn)) {
|
||||||
|
setverdict(fail, "DL block BSN doesn't match: ",
|
||||||
|
dl_block.data.blocks[0].hdr.length_ind, " vs exp ", exp_bsn);
|
||||||
|
}
|
||||||
|
|
||||||
if (lengthof(dl_block.data.blocks) < 1) {
|
if (lengthof(dl_block.data.blocks) < 1) {
|
||||||
setverdict(fail, "DL block has no LLC payload: ", dl_block);
|
setverdict(fail, "DL block has no LLC payload: ", dl_block);
|
||||||
mtc.stop;
|
mtc.stop;
|
||||||
|
@ -1378,12 +1415,7 @@ testcase TC_mo_ping_pong() runs on RAW_PCU_Test_CT {
|
||||||
var boolean ok;
|
var boolean ok;
|
||||||
var uint32_t sched_fn;
|
var uint32_t sched_fn;
|
||||||
var OCT4 tlli := '00000001'O;
|
var OCT4 tlli := '00000001'O;
|
||||||
var AckNackDescription ack_nack_desc;
|
var AckNackDescription ack_nack_desc := valueof(t_AckNackDescription_init);
|
||||||
|
|
||||||
ack_nack_desc.final_ack := '0'B;
|
|
||||||
ack_nack_desc.starting_seq_nr := 0;
|
|
||||||
ack_nack_desc.receive_block_bitmap := '0000000000000000000000000000000000000000000000000000000000000000'B;
|
|
||||||
|
|
||||||
|
|
||||||
/* Initialize NS/BSSGP side */
|
/* Initialize NS/BSSGP side */
|
||||||
f_init_bssgp();
|
f_init_bssgp();
|
||||||
|
@ -1428,9 +1460,10 @@ testcase TC_mo_ping_pong() runs on RAW_PCU_Test_CT {
|
||||||
|
|
||||||
/* Wait timer X2002 and DL block is available after CCCH IMM ASS: */
|
/* Wait timer X2002 and DL block is available after CCCH IMM ASS: */
|
||||||
f_sleep(X2002);
|
f_sleep(X2002);
|
||||||
f_rx_rlcmac_dl_block_exp_data(dl_block, sched_fn, data);
|
f_rx_rlcmac_dl_block_exp_data(dl_block, sched_fn, data, 0);
|
||||||
|
|
||||||
/* ACK the DL block */
|
/* ACK the DL block */
|
||||||
|
f_acknackdesc_ack_block(ack_nack_desc, dl_block.data.mac_hdr.hdr_ext.bsn, '1'B);
|
||||||
f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(dl_block.data.mac_hdr.hdr_ext.tfi, ack_nack_desc), 0, sched_fn);
|
f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(dl_block.data.mac_hdr.hdr_ext.tfi, ack_nack_desc), 0, sched_fn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue