aboutsummaryrefslogtreecommitdiffstats
path: root/bsc
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-12-13 19:51:29 +0100
committerHarald Welte <laforge@gnumonks.org>2017-12-13 19:51:29 +0100
commit5d1a2209f2e97a2dc27f4445c1712ccbc001c9aa (patch)
tree4f246a8624429bb00cbf3cb63bb08af4880b0ff7 /bsc
parent067d66ed5b68b0149151fa3056bef0c4af152213 (diff)
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
Diffstat (limited to 'bsc')
-rw-r--r--bsc/BSC_Tests.ttcn91
-rw-r--r--bsc/osmo-bsc.cfg180
2 files changed, 247 insertions, 24 deletions
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 926e8cc0..2e48e0be 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -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);
}
diff --git a/bsc/osmo-bsc.cfg b/bsc/osmo-bsc.cfg
index 488ba096..ac1553ef 100644
--- a/bsc/osmo-bsc.cfg
+++ b/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