bsc: Run three virtual BTSs (2 in one lac, 1 in another)
This allows us to verify if the BSC pages *only* where it is supposed to page based on the cell identity list in the 08.08 PAGING. Change-Id: I53ffe44279a7b83e045b3fdb25da64529955d457
This commit is contained in:
parent
067d66ed5b
commit
5d1a2209f2
|
@ -22,7 +22,7 @@ import from GSM_RR_Types all;
|
|||
|
||||
import from RSL_Tests all;
|
||||
|
||||
const integer NUM_BTS := 1;
|
||||
const integer NUM_BTS := 3;
|
||||
const float T3101_MAX := 12.0;
|
||||
|
||||
|
||||
|
@ -88,7 +88,7 @@ runs on test_CT {
|
|||
map(clnt.vc_IPA:IPA_PORT, system:IPA_CODEC_PT);
|
||||
connect(clnt.vc_IPA:IPA_RSL_PORT, self:IPA_RSL[i]);
|
||||
|
||||
clnt.vc_IPA.start(IPA_Emulation.main_client(bsc_host, bsc_port, "", -1, clnt.ccm_pars));
|
||||
clnt.vc_IPA.start(IPA_Emulation.main_client(bsc_host, bsc_port, "", 10000+i, clnt.ccm_pars));
|
||||
|
||||
/* wait for IPA RSL link to connect and send ID ACK */
|
||||
T.start;
|
||||
|
@ -606,10 +606,21 @@ type record Cell_Identity {
|
|||
};
|
||||
private const Cell_Identity cid := { '001'H, '001'H, 1, 0 };
|
||||
|
||||
type set of integer BtsIdList;
|
||||
|
||||
private function f_bts_in_list(integer bts_id, BtsIdList bts_ids) return boolean {
|
||||
for (var integer j := 0; j < sizeof(bts_ids); j := j + 1) {
|
||||
if (bts_id == bts_ids[j]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* core paging test helper function; used by most paging test cases */
|
||||
private function f_pageing_helper(hexstring imsi,
|
||||
template BSSMAP_FIELD_CellIdentificationList cid_list,
|
||||
BtsIdList bts_ids := { 0 },
|
||||
template RSL_ChanNeeded rsl_chneed := omit,
|
||||
template OCT4 tmsi := omit) runs on test_CT
|
||||
{
|
||||
|
@ -618,12 +629,15 @@ private function f_pageing_helper(hexstring imsi,
|
|||
var template octetstring id_enc; /* FIXME */
|
||||
var RSL_Message rx_rsl;
|
||||
var integer paging_group := hex2int(imsi[lengthof(imsi)-1]);
|
||||
var integer i;
|
||||
|
||||
f_init();
|
||||
f_bssap_reset();
|
||||
|
||||
/* Clear the queue, it might still contain stuff like BCCH FILLING */
|
||||
IPA_RSL[0].clear;
|
||||
for (i := 0; i < sizeof(bts_ids); i := i + 1) {
|
||||
IPA_RSL[bts_ids[i]].clear;
|
||||
}
|
||||
|
||||
if (isvalue(rsl_chneed)) {
|
||||
/* The values of 08.08 3.2.2.36 and 08.58 9.3.40 are luckily identical */
|
||||
|
@ -643,95 +657,116 @@ private function f_pageing_helper(hexstring imsi,
|
|||
id_enc := enc_MobileIdentity(mi);
|
||||
*/
|
||||
id_enc := ?;
|
||||
rx_rsl := f_exp_ipa_rx(0, tr_RSL_PAGING_CMD(id_enc));
|
||||
/* check channel type, paging group */
|
||||
if (rx_rsl.ies[1].body.paging_group != paging_group) {
|
||||
setverdict(fail, "Paging for wrong paging group");
|
||||
for (i := 0; i < sizeof(bts_ids); i := i + 1) {
|
||||
rx_rsl := f_exp_ipa_rx(bts_ids[i], tr_RSL_PAGING_CMD(id_enc));
|
||||
/* check channel type, paging group */
|
||||
if (rx_rsl.ies[1].body.paging_group != paging_group) {
|
||||
setverdict(fail, "Paging for wrong paging group");
|
||||
}
|
||||
if (ispresent(rsl_chneed) and
|
||||
rx_rsl.ies[3].body.chan_needed.chan_needed != valueof(rsl_chneed)) {
|
||||
setverdict(fail, "RSL Channel Needed != BSSMAP Channel Needed");
|
||||
}
|
||||
}
|
||||
if (ispresent(rsl_chneed) and
|
||||
rx_rsl.ies[3].body.chan_needed.chan_needed != valueof(rsl_chneed)) {
|
||||
setverdict(fail, "RSL Channel Needed != BSSMAP Channel Needed");
|
||||
/* do a quick check on all not-included BTSs if they received paging */
|
||||
for (i := 0; i < NUM_BTS; i := i + 1) {
|
||||
timer T := 0.1;
|
||||
if (f_bts_in_list(i, bts_ids)) {
|
||||
continue;
|
||||
}
|
||||
T.start;
|
||||
alt {
|
||||
[] IPA_RSL[i].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(id_enc))) {
|
||||
setverdict(fail, "Paging on BTS ", i, " which is not part of ", bts_ids);
|
||||
}
|
||||
[] IPA_RSL[i].receive { repeat; }
|
||||
[] T.timeout { }
|
||||
}
|
||||
}
|
||||
|
||||
setverdict(pass);
|
||||
}
|
||||
|
||||
const BtsIdList c_BtsId_all := { 0, 1, 2 };
|
||||
const BtsIdList c_BtsId_LAC1 := { 0, 1 };
|
||||
const BtsIdList c_BtsId_LAC2 := { 2 };
|
||||
|
||||
/* PAGING by IMSI + TMSI */
|
||||
testcase TC_paging_imsi_nochan() runs on test_CT {
|
||||
var BSSMAP_FIELD_CellIdentificationList cid_list;
|
||||
cid_list := valueof(ts_BSSMAP_CIL_noCell);
|
||||
f_pageing_helper('001010123456789'H, cid_list);
|
||||
f_pageing_helper('001010123456789'H, cid_list, c_BtsId_all);
|
||||
}
|
||||
|
||||
/* PAGING by IMSI + TMSI */
|
||||
testcase TC_paging_tmsi_nochan() runs on test_CT {
|
||||
var BSSMAP_FIELD_CellIdentificationList cid_list;
|
||||
cid_list := valueof(ts_BSSMAP_CIL_noCell);
|
||||
f_pageing_helper('001010100000001'H, cid_list, omit, 'A1B2C301'O);
|
||||
f_pageing_helper('001010100000001'H, cid_list, c_BtsId_all, omit, 'A1B2C301'O);
|
||||
}
|
||||
|
||||
/* Paging with different "channel needed' values */
|
||||
testcase TC_paging_tmsi_any() runs on test_CT {
|
||||
var BSSMAP_FIELD_CellIdentificationList cid_list;
|
||||
cid_list := valueof(ts_BSSMAP_CIL_noCell);
|
||||
f_pageing_helper('001010100000002'H, cid_list, RSL_CHANNEED_ANY, 'A1B2C302'O);
|
||||
f_pageing_helper('001010100000002'H, cid_list, c_BtsId_all, RSL_CHANNEED_ANY, 'A1B2C302'O);
|
||||
}
|
||||
testcase TC_paging_tmsi_sdcch() runs on test_CT {
|
||||
var BSSMAP_FIELD_CellIdentificationList cid_list;
|
||||
cid_list := valueof(ts_BSSMAP_CIL_noCell);
|
||||
f_pageing_helper('001010100000003'H, cid_list, RSL_CHANNEED_SDCCH, 'A1B2C303'O);
|
||||
f_pageing_helper('001010100000003'H, cid_list, c_BtsId_all, RSL_CHANNEED_SDCCH, 'A1B2C303'O);
|
||||
}
|
||||
testcase TC_paging_tmsi_tch_f() runs on test_CT {
|
||||
var BSSMAP_FIELD_CellIdentificationList cid_list;
|
||||
cid_list := valueof(ts_BSSMAP_CIL_noCell);
|
||||
f_pageing_helper('001010000000004'H, cid_list, RSL_CHANNEED_TCH_F, 'A1B2C304'O);
|
||||
f_pageing_helper('001010000000004'H, cid_list, c_BtsId_all, RSL_CHANNEED_TCH_F, 'A1B2C304'O);
|
||||
}
|
||||
testcase TC_paging_tmsi_tch_hf() runs on test_CT {
|
||||
var BSSMAP_FIELD_CellIdentificationList cid_list;
|
||||
cid_list := valueof(ts_BSSMAP_CIL_noCell);
|
||||
f_pageing_helper('001010000000005'H, cid_list, RSL_CHANNEED_TCH_ForH, 'A1B2C305'O);
|
||||
f_pageing_helper('001010000000005'H, cid_list, c_BtsId_all, RSL_CHANNEED_TCH_ForH, 'A1B2C305'O);
|
||||
}
|
||||
|
||||
/* Paging by CGI */
|
||||
testcase TC_paging_imsi_nochan_cgi() runs on test_CT {
|
||||
var template BSSMAP_FIELD_CellIdentificationList cid_list;
|
||||
cid_list := { cIl_CGI := { ts_BSSMAP_CI_CGI(cid.mcc, cid.mnc, cid.lac, cid.ci) } };
|
||||
f_pageing_helper('001010000000006'H, cid_list);
|
||||
f_pageing_helper('001010000000006'H, cid_list, { 0 });
|
||||
}
|
||||
|
||||
/* Paging by LAC+CI */
|
||||
testcase TC_paging_imsi_nochan_lac_ci() runs on test_CT {
|
||||
var template BSSMAP_FIELD_CellIdentificationList cid_list;
|
||||
cid_list := { cIl_LAC_CI := { ts_BSSMAP_CI_LAC_CI(cid.lac, cid.ci) } };
|
||||
f_pageing_helper('001010000000007'H, cid_list);
|
||||
f_pageing_helper('001010000000007'H, cid_list, { 0 });
|
||||
}
|
||||
|
||||
/* Paging by CI */
|
||||
testcase TC_paging_imsi_nochan_ci() runs on test_CT {
|
||||
var template BSSMAP_FIELD_CellIdentificationList cid_list;
|
||||
cid_list := { cIl_CI := { ts_BSSMAP_CI_CI(cid.ci) } };
|
||||
f_pageing_helper('001010000000008'H, cid_list);
|
||||
f_pageing_helper('001010000000008'H, cid_list, { 0 });
|
||||
}
|
||||
|
||||
/* Paging by LAI */
|
||||
testcase TC_paging_imsi_nochan_lai() runs on test_CT {
|
||||
var template BSSMAP_FIELD_CellIdentificationList cid_list;
|
||||
cid_list := { cIl_LAI := { ts_BSSMAP_CI_LAI(cid.mcc, cid.mnc, cid.lac) } };
|
||||
f_pageing_helper('001010000000009'H, cid_list);
|
||||
f_pageing_helper('001010000000009'H, cid_list, c_BtsId_LAC1);
|
||||
}
|
||||
|
||||
/* Paging by LAC */
|
||||
testcase TC_paging_imsi_nochan_lac() runs on test_CT {
|
||||
var template BSSMAP_FIELD_CellIdentificationList cid_list;
|
||||
cid_list := { cIl_LAC := { ts_BSSMAP_CI_LAC(cid.lac) } };
|
||||
f_pageing_helper('001010000000010'H, cid_list);
|
||||
f_pageing_helper('001010000000010'H, cid_list, c_BtsId_LAC1);
|
||||
}
|
||||
|
||||
/* Paging by "all in BSS" */
|
||||
testcase TC_paging_imsi_nochan_all() runs on test_CT {
|
||||
var template BSSMAP_FIELD_CellIdentificationList cid_list;
|
||||
cid_list := { cIl_allInBSS := ''O };
|
||||
f_pageing_helper('001010000000011'H, cid_list);
|
||||
f_pageing_helper('001010000000011'H, cid_list, c_BtsId_all);
|
||||
}
|
||||
|
||||
/* Paging by PLMN+LAC+RNC */
|
||||
|
@ -749,7 +784,7 @@ testcase TC_paging_imsi_load() runs on test_CT {
|
|||
var BSSMAP_FIELD_CellIdentificationList cid_list;
|
||||
timer T := 4.0;
|
||||
cid_list := valueof(ts_BSSMAP_CIL_noCell);
|
||||
f_pageing_helper('001010123456789'H, cid_list);
|
||||
f_pageing_helper('001010123456789'H, cid_list, c_BtsId_all);
|
||||
|
||||
/* tell BSC there is no paging space anymore */
|
||||
f_ipa_tx(0, ts_RSL_PAGING_LOAD_IND(0));
|
||||
|
@ -773,7 +808,7 @@ testcase TC_paging_imsi_a_reset() runs on test_CT {
|
|||
var BSSMAP_FIELD_CellIdentificationList cid_list;
|
||||
timer T := 3.0;
|
||||
cid_list := valueof(ts_BSSMAP_CIL_noCell);
|
||||
f_pageing_helper('001010123456789'H, cid_list);
|
||||
f_pageing_helper('001010123456789'H, cid_list, c_BtsId_all);
|
||||
|
||||
/* Perform a BSSMAP Reset and wait for ACK */
|
||||
BSSAP.send(ts_BSSAP_UNITDATA_req(g_sccp_addr_peer, g_sccp_addr_own, ts_BSSMAP_Reset(0)));
|
||||
|
@ -792,6 +827,14 @@ testcase TC_paging_imsi_a_reset() runs on test_CT {
|
|||
setverdict(fail, "Received PAGING after A-RESET");
|
||||
self.stop;
|
||||
}
|
||||
[] IPA_RSL[1].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(?))) {
|
||||
setverdict(fail, "Received PAGING after A-RESET");
|
||||
self.stop;
|
||||
}
|
||||
[] IPA_RSL[2].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(?))) {
|
||||
setverdict(fail, "Received PAGING after A-RESET");
|
||||
self.stop;
|
||||
}
|
||||
[] T.timeout {
|
||||
setverdict(pass);
|
||||
}
|
||||
|
|
180
bsc/osmo-bsc.cfg
180
bsc/osmo-bsc.cfg
|
@ -176,6 +176,186 @@ network
|
|||
timeslot 7
|
||||
phys_chan_config PDCH
|
||||
hopping enabled 0
|
||||
bts 1
|
||||
type sysmobts
|
||||
band DCS1800
|
||||
cell_identity 1
|
||||
location_area_code 2
|
||||
dtx uplink force
|
||||
dtx downlink
|
||||
base_station_id_code 63
|
||||
ms max power 15
|
||||
cell reselection hysteresis 4
|
||||
rxlev access min 0
|
||||
radio-link-timeout 32
|
||||
channel allocator ascending
|
||||
rach tx integer 9
|
||||
rach max transmission 7
|
||||
channel-descrption attach 1
|
||||
channel-descrption bs-pa-mfrms 5
|
||||
channel-descrption bs-ag-blks-res 1
|
||||
early-classmark-sending forbidden
|
||||
ip.access unit_id 1235 0
|
||||
oml ip.access stream_id 255 line 0
|
||||
neighbor-list mode manual-si5
|
||||
neighbor-list add arfcn 100
|
||||
neighbor-list add arfcn 200
|
||||
si5 neighbor-list add arfcn 10
|
||||
si5 neighbor-list add arfcn 20
|
||||
codec-support fr
|
||||
gprs mode gprs
|
||||
gprs 11bit_rach_support_for_egprs 0
|
||||
gprs routing area 0
|
||||
gprs network-control-order nc0
|
||||
gprs cell bvci 1235
|
||||
gprs cell timer blocking-timer 3
|
||||
gprs cell timer blocking-retries 3
|
||||
gprs cell timer unblocking-retries 3
|
||||
gprs cell timer reset-timer 3
|
||||
gprs cell timer reset-retries 3
|
||||
gprs cell timer suspend-timer 10
|
||||
gprs cell timer suspend-retries 3
|
||||
gprs cell timer resume-timer 10
|
||||
gprs cell timer resume-retries 3
|
||||
gprs cell timer capability-update-timer 10
|
||||
gprs cell timer capability-update-retries 3
|
||||
gprs nsei 1235
|
||||
gprs ns timer tns-block 3
|
||||
gprs ns timer tns-block-retries 3
|
||||
gprs ns timer tns-reset 3
|
||||
gprs ns timer tns-reset-retries 3
|
||||
gprs ns timer tns-test 30
|
||||
gprs ns timer tns-alive 3
|
||||
gprs ns timer tns-alive-retries 10
|
||||
gprs nsvc 0 nsvci 1235
|
||||
gprs nsvc 0 local udp port 23000
|
||||
gprs nsvc 0 remote udp port 23000
|
||||
gprs nsvc 0 remote ip 192.168.100.239
|
||||
gprs nsvc 1 nsvci 0
|
||||
gprs nsvc 1 local udp port 0
|
||||
gprs nsvc 1 remote udp port 0
|
||||
gprs nsvc 1 remote ip 0.0.0.0
|
||||
no force-combined-si
|
||||
trx 0
|
||||
rf_locked 0
|
||||
arfcn 871
|
||||
nominal power 23
|
||||
max_power_red 20
|
||||
rsl e1 tei 0
|
||||
timeslot 0
|
||||
phys_chan_config CCCH+SDCCH4
|
||||
hopping enabled 0
|
||||
timeslot 1
|
||||
phys_chan_config TCH/F
|
||||
hopping enabled 0
|
||||
timeslot 2
|
||||
phys_chan_config TCH/F
|
||||
hopping enabled 0
|
||||
timeslot 3
|
||||
phys_chan_config TCH/F
|
||||
hopping enabled 0
|
||||
timeslot 4
|
||||
phys_chan_config TCH/F
|
||||
hopping enabled 0
|
||||
timeslot 5
|
||||
phys_chan_config TCH/F
|
||||
hopping enabled 0
|
||||
timeslot 6
|
||||
phys_chan_config PDCH
|
||||
hopping enabled 0
|
||||
timeslot 7
|
||||
phys_chan_config PDCH
|
||||
hopping enabled 0
|
||||
bts 2
|
||||
type sysmobts
|
||||
band DCS1800
|
||||
cell_identity 1
|
||||
location_area_code 1
|
||||
dtx uplink force
|
||||
dtx downlink
|
||||
base_station_id_code 63
|
||||
ms max power 15
|
||||
cell reselection hysteresis 4
|
||||
rxlev access min 0
|
||||
radio-link-timeout 32
|
||||
channel allocator ascending
|
||||
rach tx integer 9
|
||||
rach max transmission 7
|
||||
channel-descrption attach 1
|
||||
channel-descrption bs-pa-mfrms 5
|
||||
channel-descrption bs-ag-blks-res 1
|
||||
early-classmark-sending forbidden
|
||||
ip.access unit_id 1236 0
|
||||
oml ip.access stream_id 255 line 0
|
||||
neighbor-list mode manual-si5
|
||||
neighbor-list add arfcn 100
|
||||
neighbor-list add arfcn 200
|
||||
si5 neighbor-list add arfcn 10
|
||||
si5 neighbor-list add arfcn 20
|
||||
codec-support fr
|
||||
gprs mode gprs
|
||||
gprs 11bit_rach_support_for_egprs 0
|
||||
gprs routing area 0
|
||||
gprs network-control-order nc0
|
||||
gprs cell bvci 1236
|
||||
gprs cell timer blocking-timer 3
|
||||
gprs cell timer blocking-retries 3
|
||||
gprs cell timer unblocking-retries 3
|
||||
gprs cell timer reset-timer 3
|
||||
gprs cell timer reset-retries 3
|
||||
gprs cell timer suspend-timer 10
|
||||
gprs cell timer suspend-retries 3
|
||||
gprs cell timer resume-timer 10
|
||||
gprs cell timer resume-retries 3
|
||||
gprs cell timer capability-update-timer 10
|
||||
gprs cell timer capability-update-retries 3
|
||||
gprs nsei 1236
|
||||
gprs ns timer tns-block 3
|
||||
gprs ns timer tns-block-retries 3
|
||||
gprs ns timer tns-reset 3
|
||||
gprs ns timer tns-reset-retries 3
|
||||
gprs ns timer tns-test 30
|
||||
gprs ns timer tns-alive 3
|
||||
gprs ns timer tns-alive-retries 10
|
||||
gprs nsvc 0 nsvci 1236
|
||||
gprs nsvc 0 local udp port 23000
|
||||
gprs nsvc 0 remote udp port 23000
|
||||
gprs nsvc 0 remote ip 192.168.100.239
|
||||
gprs nsvc 1 nsvci 0
|
||||
gprs nsvc 1 local udp port 0
|
||||
gprs nsvc 1 remote udp port 0
|
||||
gprs nsvc 1 remote ip 0.0.0.0
|
||||
no force-combined-si
|
||||
trx 0
|
||||
rf_locked 0
|
||||
arfcn 871
|
||||
nominal power 23
|
||||
max_power_red 20
|
||||
rsl e1 tei 0
|
||||
timeslot 0
|
||||
phys_chan_config CCCH+SDCCH4
|
||||
hopping enabled 0
|
||||
timeslot 1
|
||||
phys_chan_config TCH/F
|
||||
hopping enabled 0
|
||||
timeslot 2
|
||||
phys_chan_config TCH/F
|
||||
hopping enabled 0
|
||||
timeslot 3
|
||||
phys_chan_config TCH/F
|
||||
hopping enabled 0
|
||||
timeslot 4
|
||||
phys_chan_config TCH/F
|
||||
hopping enabled 0
|
||||
timeslot 5
|
||||
phys_chan_config TCH/F
|
||||
hopping enabled 0
|
||||
timeslot 6
|
||||
phys_chan_config PDCH
|
||||
hopping enabled 0
|
||||
timeslot 7
|
||||
phys_chan_config PDCH
|
||||
hopping enabled 0
|
||||
msc 0
|
||||
ip.access rtp-base 4000
|
||||
timeout-ping 20
|
||||
|
|
|
@ -449,7 +449,7 @@ template BSSMAP_FIELD_CellIdentificationList ts_BSSMAP_CIL_noCell := {
|
|||
}
|
||||
|
||||
private function f_enc_mcc_mnc(GsmMcc mcc, GsmMnc mnc) return OCT3 {
|
||||
return hex2oct(mcc[1] & mcc[0] & mnc[0] & mnc[3] & mnc[2]);
|
||||
return hex2oct(mcc[1] & mcc[0] & mnc[0] & mnc[2] & mnc[1]);
|
||||
}
|
||||
|
||||
template BSSMAP_FIELD_CellIdentification_CGI ts_BSSMAP_CI_CGI(GsmMcc mcc, GsmMnc mnc, GsmLac lac, GsmCellId ci) := {
|
||||
|
|
Loading…
Reference in New Issue