pcu: send UL CONTROL ACK triggered by DL ACK/NACK
Change-Id: Ib409394257427cfc62da08fe06ce6c001dcf608a
This commit is contained in:
parent
c3acceca1a
commit
7503c872db
|
@ -741,7 +741,7 @@ runs on RAW_PCU_Test_CT {
|
||||||
dl_fn := pcu_msg.u.data_req.fn;
|
dl_fn := pcu_msg.u.data_req.fn;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function f_rx_rlcmac_dl_block_exp_ack_nack(out RlcmacDlBlock dl_block)
|
private function f_rx_rlcmac_dl_block_exp_ack_nack(out RlcmacDlBlock dl_block, out uint32_t poll_fn)
|
||||||
runs on RAW_PCU_Test_CT {
|
runs on RAW_PCU_Test_CT {
|
||||||
var uint32_t dl_fn;
|
var uint32_t dl_fn;
|
||||||
|
|
||||||
|
@ -750,6 +750,8 @@ runs on RAW_PCU_Test_CT {
|
||||||
setverdict(fail, "Failed to match Packet Uplink ACK / NACK");
|
setverdict(fail, "Failed to match Packet Uplink ACK / NACK");
|
||||||
mtc.stop;
|
mtc.stop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
poll_fn := dl_fn + f_rrbp_fn_delay(dl_block.ctrl.mac_hdr.rrbp);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function f_rx_rlcmac_dl_block_exp_dummy(out RlcmacDlBlock dl_block)
|
private function f_rx_rlcmac_dl_block_exp_dummy(out RlcmacDlBlock dl_block)
|
||||||
|
@ -1084,6 +1086,7 @@ testcase TC_cs_lqual_ul_tbf() runs on RAW_PCU_Test_CT {
|
||||||
var PCUIF_Message pcu_msg;
|
var PCUIF_Message pcu_msg;
|
||||||
var octetstring data;
|
var octetstring data;
|
||||||
var boolean ok;
|
var boolean ok;
|
||||||
|
var uint32_t unused_fn;
|
||||||
|
|
||||||
/* Initialize the PCU interface abstraction */
|
/* Initialize the PCU interface abstraction */
|
||||||
f_init_raw(testcasename());
|
f_init_raw(testcasename());
|
||||||
|
@ -1135,7 +1138,7 @@ testcase TC_cs_lqual_ul_tbf() runs on RAW_PCU_Test_CT {
|
||||||
f_tx_rlcmac_ul_block(ul_data, lqual * 10);
|
f_tx_rlcmac_ul_block(ul_data, lqual * 10);
|
||||||
|
|
||||||
/* Enqueue RTS.req, expect DATA.req with UL ACK from the PCU */
|
/* Enqueue RTS.req, expect DATA.req with UL ACK from the PCU */
|
||||||
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block);
|
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, unused_fn);
|
||||||
|
|
||||||
log("Rx Packet Uplink ACK / NACK with Channel Coding Command: ",
|
log("Rx Packet Uplink ACK / NACK with Channel Coding Command: ",
|
||||||
dl_block.ctrl.payload.u.ul_ack_nack.gprs.ch_coding_cmd);
|
dl_block.ctrl.payload.u.ul_ack_nack.gprs.ch_coding_cmd);
|
||||||
|
@ -1167,6 +1170,7 @@ testcase TC_cs_initial_ul() runs on RAW_PCU_Test_CT {
|
||||||
var boolean ok;
|
var boolean ok;
|
||||||
var integer lqual_cb;
|
var integer lqual_cb;
|
||||||
var ChCodingCommand last_ch_coding;
|
var ChCodingCommand last_ch_coding;
|
||||||
|
var uint32_t unused_fn;
|
||||||
|
|
||||||
/* Initialize the PCU interface abstraction */
|
/* Initialize the PCU interface abstraction */
|
||||||
f_init_raw(testcasename());
|
f_init_raw(testcasename());
|
||||||
|
@ -1211,7 +1215,7 @@ testcase TC_cs_initial_ul() runs on RAW_PCU_Test_CT {
|
||||||
f_tx_rlcmac_ul_block(ul_data, lqual_cb);
|
f_tx_rlcmac_ul_block(ul_data, lqual_cb);
|
||||||
|
|
||||||
/* Enqueue RTS.req, expect DATA.req with UL ACK from the PCU */
|
/* Enqueue RTS.req, expect DATA.req with UL ACK from the PCU */
|
||||||
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block);
|
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, unused_fn);
|
||||||
last_ch_coding := dl_block.ctrl.payload.u.ul_ack_nack.gprs.ch_coding_cmd;
|
last_ch_coding := dl_block.ctrl.payload.u.ul_ack_nack.gprs.ch_coding_cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1235,7 +1239,7 @@ testcase TC_cs_initial_ul() runs on RAW_PCU_Test_CT {
|
||||||
f_tx_rlcmac_ul_block(ul_data, 0); /* 0 dB, make sure we downgrade CS */
|
f_tx_rlcmac_ul_block(ul_data, 0); /* 0 dB, make sure we downgrade CS */
|
||||||
|
|
||||||
/* Enqueue RTS.req, expect DATA.req with UL ACK from the PCU */
|
/* Enqueue RTS.req, expect DATA.req with UL ACK from the PCU */
|
||||||
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block);
|
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, unused_fn);
|
||||||
|
|
||||||
last_ch_coding := dl_block.ctrl.payload.u.ul_ack_nack.gprs.ch_coding_cmd;
|
last_ch_coding := dl_block.ctrl.payload.u.ul_ack_nack.gprs.ch_coding_cmd;
|
||||||
}
|
}
|
||||||
|
@ -1254,6 +1258,7 @@ testcase TC_cs_max_ul() runs on RAW_PCU_Test_CT {
|
||||||
var RlcmacDlBlock dl_block;
|
var RlcmacDlBlock dl_block;
|
||||||
var boolean ok;
|
var boolean ok;
|
||||||
var ChCodingCommand last_ch_coding;
|
var ChCodingCommand last_ch_coding;
|
||||||
|
var uint32_t unused_fn;
|
||||||
|
|
||||||
/* Initialize the PCU interface abstraction */
|
/* Initialize the PCU interface abstraction */
|
||||||
f_init_raw(testcasename());
|
f_init_raw(testcasename());
|
||||||
|
@ -1295,7 +1300,7 @@ testcase TC_cs_max_ul() runs on RAW_PCU_Test_CT {
|
||||||
f_tx_rlcmac_ul_block(ul_data, 40*10); /* 40 dB */
|
f_tx_rlcmac_ul_block(ul_data, 40*10); /* 40 dB */
|
||||||
|
|
||||||
/* Enqueue RTS.req, expect DATA.req with UL ACK from the PCU */
|
/* Enqueue RTS.req, expect DATA.req with UL ACK from the PCU */
|
||||||
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block);
|
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, unused_fn);
|
||||||
|
|
||||||
last_ch_coding := dl_block.ctrl.payload.u.ul_ack_nack.gprs.ch_coding_cmd;
|
last_ch_coding := dl_block.ctrl.payload.u.ul_ack_nack.gprs.ch_coding_cmd;
|
||||||
}
|
}
|
||||||
|
@ -1316,6 +1321,7 @@ testcase TC_t3169() runs on RAW_PCU_Test_CT {
|
||||||
var PCUIF_Message pcu_msg;
|
var PCUIF_Message pcu_msg;
|
||||||
var octetstring data;
|
var octetstring data;
|
||||||
var boolean ok;
|
var boolean ok;
|
||||||
|
var uint32_t unused_fn;
|
||||||
var OCT4 tlli := '00000001'O;
|
var OCT4 tlli := '00000001'O;
|
||||||
|
|
||||||
/* Initialize NS/BSSGP side */
|
/* Initialize NS/BSSGP side */
|
||||||
|
@ -1347,7 +1353,7 @@ testcase TC_t3169() runs on RAW_PCU_Test_CT {
|
||||||
|
|
||||||
/* Send one UL block and make sure it is ACKED fine */
|
/* Send one UL block and make sure it is ACKED fine */
|
||||||
f_tx_rlcmac_ul_n_blocks(ul_tbf_ass, 1);
|
f_tx_rlcmac_ul_n_blocks(ul_tbf_ass, 1);
|
||||||
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block);
|
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, unused_fn);
|
||||||
/* UL block should be received in SGSN */
|
/* UL block should be received in SGSN */
|
||||||
BSSGP[0].receive(tr_BSSGP_UL_UD(tlli, mp_gb_cfg.cell_id));
|
BSSGP[0].receive(tr_BSSGP_UL_UD(tlli, mp_gb_cfg.cell_id));
|
||||||
|
|
||||||
|
@ -1403,7 +1409,9 @@ testcase TC_mo_ping_pong() runs on RAW_PCU_Test_CT {
|
||||||
|
|
||||||
/* Send one UL block and make sure it is ACKED fine */
|
/* Send one UL block and make sure it is ACKED fine */
|
||||||
f_tx_rlcmac_ul_n_blocks(ul_tbf_ass, 1);
|
f_tx_rlcmac_ul_n_blocks(ul_tbf_ass, 1);
|
||||||
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block);
|
f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, sched_fn);
|
||||||
|
/* DL ACK/NACK sets poll+rrbp requesting PACKET CONTROL ACK */
|
||||||
|
f_tx_rlcmac_ul_block(ts_RLCMAC_CTRL_ACK(tlli), 0, sched_fn);
|
||||||
|
|
||||||
/* UL block should be received in SGSN */
|
/* UL block should be received in SGSN */
|
||||||
BSSGP[0].receive(tr_BSSGP_UL_UD(tlli, mp_gb_cfg.cell_id));
|
BSSGP[0].receive(tr_BSSGP_UL_UD(tlli, mp_gb_cfg.cell_id));
|
||||||
|
|
Loading…
Reference in New Issue