aboutsummaryrefslogtreecommitdiffstats
path: root/sgsn/SGSN_Tests.ttcn
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2020-10-04 22:52:56 +0200
committerHarald Welte <laforge@osmocom.org>2020-10-09 12:27:11 +0200
commit5339b2e37227520e9f355635c8b4193d2b701e69 (patch)
tree49591969a07efa90040c64d3fc86449620d1f6dd /sgsn/SGSN_Tests.ttcn
parent23e274919d14a37a9c40163219ce230acd2a100f (diff)
BSSGP_Emulation: Support multiple PTP-BVC within one Entity
The existing BSSGP_Emulation is built around the assumption that every instance of BSSGP_Emulation only servers one signaling-BVC and one PTP-BVC. While this is true for osmo-pcu at this point (BTS-colocated PCU), other BSS/PCU implementations differ. In general, there can always be any number of PTP BVC (one per cell) next to the signaling BVC (one per BSS). Let's represent this in BSSGP_Emulation so we can create more comprehensive tests. Change-Id: I7e30b4c4e188518a574e082962fba457b3a97ce3
Diffstat (limited to 'sgsn/SGSN_Tests.ttcn')
-rw-r--r--sgsn/SGSN_Tests.ttcn126
1 files changed, 81 insertions, 45 deletions
diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn
index 8a87ee27..53ecdff3 100644
--- a/sgsn/SGSN_Tests.ttcn
+++ b/sgsn/SGSN_Tests.ttcn
@@ -130,9 +130,11 @@ modulepar {
}
};
+const integer NUM_BVC_PER_NSE := 1;
type record GbInstance {
NS_CT vc_NS,
BSSGP_CT vc_BSSGP,
+ BSSGP_BVC_CT vc_BSSGP_BVC[NUM_BVC_PER_NSE],
BssgpConfig cfg
};
@@ -154,6 +156,9 @@ type component test_CT {
/* only to get events from IPA underneath GSUP */
port IPA_CTRL_PT GSUP_IPA_EVENT;
+ /* only needed at start to get the per-BVC references */
+ port BSSGP_CT_PROC_PT PROC;
+
var GTP_Emulation_CT vc_GTP;
port TELNETasp_PT SGSNVTY;
@@ -223,7 +228,13 @@ private function f_init_gb(inout GbInstance gb, charstring id, integer offset) r
connect(gb.vc_BSSGP:BSCP, gb.vc_NS:NS_SP);
gb.vc_NS.start(NSStart(mp_nsconfig[offset]));
- gb.vc_BSSGP.start(BssgpStart(gb.cfg));
+ gb.vc_BSSGP.start(BssgpStart(gb.cfg, testcasename()));
+ /* resolve the per-BVC component references */
+ for (var integer i := 0; i < lengthof(gb.cfg.bvc); i := i+1) {
+ connect(self:PROC, gb.vc_BSSGP:PROC);
+ gb.vc_BSSGP_BVC[i] := f_bssgp_get_bvci_ct(gb.cfg.bvc[i].bvci, PROC);
+ disconnect(self:PROC, gb.vc_BSSGP:PROC);
+ }
}
private function f_init_gsup(charstring id) runs on test_CT {
@@ -297,45 +308,63 @@ function f_init(BcdMccMnc mcc_mnc := '262F42'H) runs on test_CT {
g_initialized := true;
g_gb[0].cfg := {
nsei := 96,
- bvci := 196,
- cell_id := {
- ra_id := {
- lai := {
- mcc_mnc := mcc_mnc, lac := 13135},
- rac := 0
- },
- cell_id := 20960
- },
sgsn_role := false,
- depth := BSSGP_DECODE_DEPTH_L3
+ bvc := {
+ {
+ bvci := 196,
+ cell_id := {
+ ra_id := {
+ lai := {
+ mcc_mnc := mcc_mnc,
+ lac := 13135
+ },
+ rac := 0
+ },
+ cell_id := 20960
+ },
+ depth := BSSGP_DECODE_DEPTH_L3
+ }
+ }
};
g_gb[1].cfg := {
nsei := 97,
- bvci := 210,
- cell_id := {
- ra_id := {
- lai := {
- mcc_mnc := mcc_mnc, lac := 13200},
- rac := 0
- },
- cell_id := 20961
- },
sgsn_role := false,
- depth := BSSGP_DECODE_DEPTH_L3
+ bvc := {
+ {
+ bvci := 210,
+ cell_id := {
+ ra_id := {
+ lai := {
+ mcc_mnc := mcc_mnc,
+ lac := 13200
+ },
+ rac := 0
+ },
+ cell_id := 20961
+ },
+ depth := BSSGP_DECODE_DEPTH_L3
+ }
+ }
};
g_gb[2].cfg := {
nsei := 98,
- bvci := 220,
- cell_id := {
- ra_id := {
- lai := {
- mcc_mnc := mcc_mnc, lac := 13300},
- rac := 0
- },
- cell_id := 20962
- },
sgsn_role := false,
- depth := BSSGP_DECODE_DEPTH_L3
+ bvc := {
+ {
+ bvci := 220,
+ cell_id := {
+ ra_id := {
+ lai := {
+ mcc_mnc := mcc_mnc,
+ lac := 13300
+ },
+ rac := 0
+ },
+ cell_id := 20962
+ },
+ depth := BSSGP_DECODE_DEPTH_L3
+ }
+ }
};
f_init_vty();
@@ -413,7 +442,11 @@ runs on test_CT return BSSGP_ConnHdlr {
tlli := f_gprs_tlli_random(),
tlli_old := omit,
ra := omit,
- bssgp_cell_id := { gb[0].cfg.cell_id, gb[1].cfg.cell_id, gb[2].cfg.cell_id },
+ bssgp_cell_id := {
+ gb[0].cfg.bvc[0].cell_id,
+ gb[1].cfg.bvc[0].cell_id,
+ gb[2].cfg.bvc[0].cell_id
+ },
rnc_send_initial_ue := true,
vec := omit,
net := net_pars,
@@ -428,15 +461,18 @@ runs on test_CT return BSSGP_ConnHdlr {
}
vc_conn := BSSGP_ConnHdlr.create(id);
- connect(vc_conn:BSSGP[0], gb[0].vc_BSSGP:BSSGP_SP);
- connect(vc_conn:BSSGP_SIG[0], gb[0].vc_BSSGP:BSSGP_SP_SIG);
- connect(vc_conn:BSSGP_PROC[0], gb[0].vc_BSSGP:BSSGP_PROC);
- connect(vc_conn:BSSGP[1], gb[1].vc_BSSGP:BSSGP_SP);
- connect(vc_conn:BSSGP_SIG[1], gb[1].vc_BSSGP:BSSGP_SP_SIG);
- connect(vc_conn:BSSGP_PROC[1], gb[1].vc_BSSGP:BSSGP_PROC);
- connect(vc_conn:BSSGP[2], gb[2].vc_BSSGP:BSSGP_SP);
- connect(vc_conn:BSSGP_SIG[2], gb[2].vc_BSSGP:BSSGP_SP_SIG);
- connect(vc_conn:BSSGP_PROC[2], gb[2].vc_BSSGP:BSSGP_PROC);
+
+ connect(vc_conn:BSSGP[0], gb[0].vc_BSSGP_BVC[0]:BSSGP_SP);
+ connect(vc_conn:BSSGP_SIG[0], gb[0].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);
+ connect(vc_conn:BSSGP_PROC[0], gb[0].vc_BSSGP_BVC[0]:BSSGP_PROC);
+
+ connect(vc_conn:BSSGP[1], gb[1].vc_BSSGP_BVC[0]:BSSGP_SP);
+ connect(vc_conn:BSSGP_SIG[1], gb[1].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);
+ connect(vc_conn:BSSGP_PROC[1], gb[1].vc_BSSGP_BVC[0]:BSSGP_PROC);
+
+ connect(vc_conn:BSSGP[2], gb[2].vc_BSSGP_BVC[0]:BSSGP_SP);
+ connect(vc_conn:BSSGP_SIG[2], gb[2].vc_BSSGP_BVC[0]:BSSGP_SP_SIG);
+ connect(vc_conn:BSSGP_PROC[2], gb[2].vc_BSSGP_BVC[0]:BSSGP_PROC);
/* FIXME: support multiple RNCs */
if (g_ranap_enable) {
@@ -470,7 +506,7 @@ runs on BSSGP_ConnHdlr {
llc := f_llc_create(false);
/* register with BSSGP core */
- f_bssgp_client_register(g_pars.imsi, g_pars.tlli, g_pars.bssgp_cell_id[0]);
+ f_bssgp_client_register(g_pars.imsi, g_pars.tlli);
/* tell GSUP dispatcher to send this IMSI to us */
f_create_gsup_expect(hex2str(g_pars.imsi));
/* tell GTP dispatcher to send this IMSI to us */
@@ -1091,7 +1127,7 @@ private function f_TC_attach_closed_foreign(charstring id) runs on BSSGP_ConnHdl
/* Simulate a foreign IMSI */
g_pars.imsi := '001010123456789'H;
- f_bssgp_client_register(g_pars.imsi, g_pars.tlli, g_pars.bssgp_cell_id[0]);
+ f_bssgp_client_register(g_pars.imsi, g_pars.tlli);
g_pars.net.expect_auth := false;
@@ -2344,7 +2380,7 @@ private function f_TC_attach_closed_imsi_added(charstring id) runs on BSSGP_Conn
f_bssgp_client_unregister(g_pars.imsi);
/* Simulate a foreign IMSI */
g_pars.imsi := '001010123456700'H;
- f_bssgp_client_register(g_pars.imsi, g_pars.tlli, g_pars.bssgp_cell_id[0]);
+ f_bssgp_client_register(g_pars.imsi, g_pars.tlli);
/* there is no auth */
g_pars.net.expect_auth := false;
@@ -2522,7 +2558,7 @@ private function f_TC_attach_rau_a_b(charstring id) runs on BSSGP_ConnHdlr {
log("rau complete unregistering");
f_bssgp_client_unregister(g_pars.imsi);
- f_bssgp_client_register(g_pars.imsi, g_pars.tlli, g_pars.bssgp_cell_id[1], BSSGP_PROC[1]);
+ f_bssgp_client_register(g_pars.imsi, g_pars.tlli, BSSGP_PROC[1]);
log("sending second RAU via different RA");
f_routing_area_update(f_cellid_to_RAI(g_pars.bssgp_cell_id[1]), 1);