1672 |
1672 |
return dt;
|
1673 |
1673 |
}
|
1674 |
1674 |
|
|
1675 |
function f_est_dchan_dyn(OCT1 ra, GsmFrameNumber fn, octetstring l3)
|
|
1676 |
runs on test_CT return DchanTuple {
|
|
1677 |
var BSSAP_N_CONNECT_ind rx_c_ind;
|
|
1678 |
var DchanTuple dt;
|
|
1679 |
|
|
1680 |
/* Send CHAN RQD */
|
|
1681 |
var RSL_Message rx_rsl;
|
|
1682 |
f_ipa_tx(0, ts_RSL_CHAN_RQD(ra, fn));
|
|
1683 |
|
|
1684 |
/* The dyn TS first deactivates PDCH */
|
|
1685 |
rx_rsl := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL), T3101_MAX);
|
|
1686 |
dt.rsl_chan_nr := rx_rsl.ies[0].body.chan_nr;
|
|
1687 |
f_ipa_tx(0, ts_RSL_RF_CHAN_REL_ACK(dt.rsl_chan_nr));
|
|
1688 |
|
|
1689 |
rx_rsl := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_CHAN_ACTIV));
|
|
1690 |
dt.rsl_chan_nr := rx_rsl.ies[0].body.chan_nr;
|
|
1691 |
|
|
1692 |
/* Now activates the signalling channel */
|
|
1693 |
f_ipa_tx(0, ts_RSL_CHAN_ACT_ACK(dt.rsl_chan_nr, fn+10));
|
|
1694 |
rx_rsl := f_exp_ipa_rx(0, tr_RSL_IMM_ASSIGN(0));
|
|
1695 |
|
|
1696 |
f_ipa_tx(0, ts_RSL_EST_IND(dt.rsl_chan_nr, valueof(ts_RslLinkID_DCCH(0)), l3));
|
|
1697 |
|
|
1698 |
BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) -> value rx_c_ind;
|
|
1699 |
dt.sccp_conn_id := rx_c_ind.connectionId;
|
|
1700 |
BSSAP.send(ts_BSSAP_CONNECT_res(dt.sccp_conn_id));
|
|
1701 |
|
|
1702 |
return dt;
|
|
1703 |
}
|
|
1704 |
|
1675 |
1705 |
/* expect RF CAN REL from BTS, acknowledge it and clear the MSC side */
|
1676 |
1706 |
private function f_exp_chan_rel_and_clear(DchanTuple dt, integer bts_nr := 0) runs on test_CT {
|
1677 |
1707 |
var RSL_Message rx_rsl;
|
... | ... | |
10287 |
10317 |
f_shutdown_helper();
|
10288 |
10318 |
}
|
10289 |
10319 |
|
|
10320 |
testcase TC_osmo_dyn_as_sdcch() runs on test_CT {
|
|
10321 |
var ASP_RSL_Unitdata rsl_ud;
|
|
10322 |
var integer i;
|
|
10323 |
var integer chreq_total, chreq_nochan;
|
|
10324 |
|
|
10325 |
f_init_vty();
|
|
10326 |
f_ts_set_chcomb(0, 0, 2, "TCH/F_TCH/H_PDCH");
|
|
10327 |
f_ts_set_chcomb(0, 0, 3, "TCH/F_TCH/H_PDCH");
|
|
10328 |
f_ts_set_chcomb(0, 0, 4, "TCH/F_TCH/H_PDCH");
|
|
10329 |
f_vty_transceive(BSCVTY, "drop bts connection 0 oml");
|
|
10330 |
/* Now we have 1 TCH/F, 3 OSMO_DYN, 1 TCH/H */
|
|
10331 |
|
|
10332 |
f_init(1);
|
|
10333 |
|
|
10334 |
/* The dyn TS want to activate PDCH mode, ACK that. */
|
|
10335 |
var RslChannelNr chan_nr;
|
|
10336 |
chan_nr := valueof(t_RslChanNr_PDCH(2));
|
|
10337 |
f_exp_ipa_rx(0, tr_RSL_CHAN_ACT_PDCH(chan_nr, ?));
|
|
10338 |
f_ipa_tx(0, ts_RSL_CHAN_ACT_ACK(chan_nr, 2342));
|
|
10339 |
chan_nr := valueof(t_RslChanNr_PDCH(3));
|
|
10340 |
f_exp_ipa_rx(0, tr_RSL_CHAN_ACT_PDCH(chan_nr, ?));
|
|
10341 |
f_ipa_tx(0, ts_RSL_CHAN_ACT_ACK(chan_nr, 2342));
|
|
10342 |
chan_nr := valueof(t_RslChanNr_PDCH(4));
|
|
10343 |
f_exp_ipa_rx(0, tr_RSL_CHAN_ACT_PDCH(chan_nr, ?));
|
|
10344 |
f_ipa_tx(0, ts_RSL_CHAN_ACT_ACK(chan_nr, 2342));
|
|
10345 |
|
|
10346 |
f_sleep(1.0);
|
|
10347 |
|
|
10348 |
log(f_vty_transceive_ret(BSCVTY, "show lchan summary"));
|
|
10349 |
|
|
10350 |
/* Exhaust all dedicated SDCCH lchans.
|
|
10351 |
/* GSM 44.018 Table 9.1.8.2:
|
|
10352 |
* RA = '13'O -> Establishment cause = 0001xxxx (MS dual rate capable and asks for "SDCCH").
|
|
10353 |
*/
|
|
10354 |
for (i := 0; i < NUM_SDCCH_PER_BTS; i := i+1) {
|
|
10355 |
f_est_dchan('13'O, NUM_SDCCH_PER_BTS + i, '00010203040506'O);
|
|
10356 |
}
|
|
10357 |
|
|
10358 |
log(f_vty_transceive_ret(BSCVTY, "show lchan summary"));
|
|
10359 |
|
|
10360 |
/* Three dyn TS as well as one static TCH/F and one TCH/H timeslot are available.
|
|
10361 |
* The first dyn TS gets converted to SDCCH8 */
|
|
10362 |
f_est_dchan_dyn('33'O, NUM_SDCCH_PER_BTS + i, '00010203040506'O);
|
|
10363 |
log("XXX2", f_vty_transceive_ret(BSCVTY, "show lchan summary"));
|
|
10364 |
/* Also occupy the seven other SDCCH of the dyn TS */
|
|
10365 |
for (i := 0; i < 7; i := i+1) {
|
|
10366 |
f_est_dchan('33'O, NUM_SDCCH_PER_BTS + i, '00010203040506'O);
|
|
10367 |
log("XXX2.", i, ": ", f_vty_transceive_ret(BSCVTY, "show lchan summary"));
|
|
10368 |
}
|
|
10369 |
|
|
10370 |
/* clean up config */
|
|
10371 |
f_ts_set_chcomb(0, 0, 2, "TCH/F");
|
|
10372 |
f_ts_set_chcomb(0, 0, 3, "TCH/F");
|
|
10373 |
f_ts_set_chcomb(0, 0, 4, "TCH/F");
|
|
10374 |
|
|
10375 |
f_shutdown_helper();
|
|
10376 |
}
|
|
10377 |
|
10290 |
10378 |
control {
|
10291 |
10379 |
/* CTRL interface testing */
|
10292 |
10380 |
execute( TC_ctrl_msc_connection_status() );
|
... | ... | |
10595 |
10683 |
|
10596 |
10684 |
execute( TC_ctrl_trx_rf_locked() );
|
10597 |
10685 |
|
|
10686 |
execute( TC_osmo_dyn_as_sdcch() );
|
|
10687 |
|
10598 |
10688 |
execute( TC_lost_sdcch_during_assignment() );
|
10599 |
10689 |
}
|
10600 |
10690 |
|