Rename BSSMAP_Emulation -> RAN_Emulation

So far, BSSMAP_Emulation supported only a transport over BSSMAP.
However, we soon intend to merge support for RANAP in order to
simulate RANAP/Iu connections as well as BSSMAP.  Let's start
by renaming some of the existing types/functions/ports/modules
without introducing any functional changes just yet.

Related: OS#2857, OS#2856
Change-Id: Iecbcb0c6c136baad9460eca40606bb4010d8882d
This commit is contained in:
Harald Welte 2019-04-14 22:23:14 +02:00
parent 408a7ef9fc
commit 6811d10af7
14 changed files with 228 additions and 230 deletions

View File

@ -5,7 +5,7 @@ import from Osmocom_Types all;
import from SCCPasp_Types all;
import from BSSAP_Types all;
import from BSSAP_CodecPort all;
import from BSSMAP_Emulation all;
import from RAN_Emulation all;
import from BSSMAP_Templates all;
import from MobileL3_Types all;
@ -17,9 +17,9 @@ import from MGCP_Templates all;
import from SDP_Types all;
/* this component represents a single subscriber connection at the MSC.
* There is a 1:1 mapping between SCCP connections and BSSAP_ConnHdlr components.
* We inherit all component variables, ports, functions, ... from BSSAP_ConnHdlr */
type component BSC_MS_ConnHdlr extends BSSAP_ConnHdlr {
* There is a 1:1 mapping between SCCP connections and RAN_ConnHdlr components.
* We inherit all component variables, ports, functions, ... from RAN_ConnHdlr */
type component BSC_MS_ConnHdlr extends RAN_ConnHdlr {
/* SCCP Connecction Identifier for the underlying SCCP connection */
var integer g_sccp_conn_id;
var MgcpConnectionId g_mgcp_conn_id;
@ -27,18 +27,18 @@ type component BSC_MS_ConnHdlr extends BSSAP_ConnHdlr {
var BSC_State g_state;
}
/* Callback function from general BSSMAP_Emulation whenever a new incoming
/* Callback function from general RAN_Emulation whenever a new incoming
* SCCP connection arrivces. Must create + start a new component */
private function CreateCallback(BSSAP_N_CONNECT_ind conn_ind, charstring id)
runs on BSSMAP_Emulation_CT return BSSAP_ConnHdlr {
runs on RAN_Emulation_CT return RAN_ConnHdlr {
log("Incoming SCCP Connection on BSC ?!?");
self.stop;
}
/* Callback function from general BSSMAP_Emulation whenever a connectionless
/* Callback function from general RAN_Emulation whenever a connectionless
* BSSMAP message arrives. Can retunr a PDU_BSSAP that should be sent in return */
private function UnitdataCallback(PDU_BSSAP bssap)
runs on BSSMAP_Emulation_CT return template PDU_BSSAP {
runs on RAN_Emulation_CT return template PDU_BSSAP {
var template PDU_BSSAP resp := omit;
if (match(bssap, tr_BSSMAP_Reset)) {
@ -48,7 +48,7 @@ runs on BSSMAP_Emulation_CT return template PDU_BSSAP {
return resp;
}
const BssmapOps BSC_MS_BssmapOps := {
const RanOps BSC_MS_RanOps := {
create_cb := refers(CreateCallback),
unitdata_cb := refers(UnitdataCallback),
decode_dtap := false,
@ -154,16 +154,16 @@ runs on BSC_MS_ConnHdlr {
log("Unhandled DTAP ", l3);
}
[g_state == BSC_STATE_WAIT_DISC_IND] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
[g_state == BSC_STATE_WAIT_DISC_IND] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
setverdict(pass);
self.stop;
}
[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND) {
[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_CONF_IND) {
}
/* disconnect in invalid state */
[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
setverdict(fail);
self.stop;
}

View File

@ -9,7 +9,7 @@ import from SCCPasp_Types all;
import from SCCP_Emulation all;
import from BSSAP_CodecPort all;
import from BSSMAP_Emulation all;
import from RAN_Emulation all;
import from BSC_MS_ConnectionHandler all;
@ -17,7 +17,7 @@ type component BSC_CT {
/* component references */
var IPA_Emulation_CT vc_IPA;
var SCCP_CT vc_SCCP;
var BSSMAP_Emulation_CT vc_BSSMAP;
var RAN_Emulation_CT vc_BSSMAP;
/* test port to SCCP emulation */
port SCCPasp_PT SCCP;
@ -48,7 +48,7 @@ function main(charstring remote_ip, PortNumber remote_port,
/* create components for IPA/SCCP/BSS[M]AP stack */
vc_IPA := IPA_Emulation_CT.create(id & "-IPA");
vc_SCCP := SCCP_CT.create(id & "-SCCP");
vc_BSSMAP := BSSMAP_Emulation_CT.create(id & "-BSSMAP");
vc_BSSMAP := RAN_Emulation_CT.create(id & "-BSSMAP");
map(vc_IPA:IPA_PORT, system:IPA_CODEC_PT);
@ -64,7 +64,7 @@ function main(charstring remote_ip, PortNumber remote_port,
/* start components */
vc_IPA.start(IPA_Emulation.main_client(remote_ip, remote_port, local_ip, local_port, ccm_pars));
vc_SCCP.start(SCCPStart(sccp_pars));
vc_BSSMAP.start(BSSMAP_Emulation.main(BSC_MS_ConnectionHandler.BSC_MS_BssmapOps, id));
vc_BSSMAP.start(RAN_Emulation.main(BSC_MS_ConnectionHandler.BSC_MS_RanOps, id));
/* Initial delay to wait for IPA connection establishment */
T.start(2.0);

View File

@ -5,7 +5,7 @@ import from Osmocom_Types all;
import from SCCPasp_Types all;
import from BSSAP_Types all;
import from BSSAP_CodecPort all;
import from BSSMAP_Emulation all;
import from RAN_Emulation all;
import from BSSMAP_Templates all;
import from MGCP_Types all;
@ -13,9 +13,9 @@ import from MGCP_Templates all;
import from SDP_Types all;
/* this component represents a single subscriber connection at the MSC.
* There is a 1:1 mapping between SCCP connections and BSSAP_ConnHdlr components.
* We inherit all component variables, ports, functions, ... from BSSAP_ConnHdlr */
type component MSC_ConnHdlr extends BSSAP_ConnHdlr {
* There is a 1:1 mapping between SCCP connections and RAN_ConnHdlr components.
* We inherit all component variables, ports, functions, ... from RAN_ConnHdlr */
type component MSC_ConnHdlr extends RAN_ConnHdlr {
/* SCCP Connecction Identifier for the underlying SCCP connection */
var integer g_sccp_conn_id;
@ -28,10 +28,10 @@ type component MSC_ConnHdlr extends BSSAP_ConnHdlr {
/* Callback function from general BSSMAP_Emulation whenever a new incoming
* SCCP connection arrivces. Must create + start a new component */
private function CreateCallback(BSSAP_N_CONNECT_ind conn_ind, charstring id)
runs on BSSMAP_Emulation_CT return BSSAP_ConnHdlr {
runs on RAN_Emulation_CT return RAN_ConnHdlr {
var MSC_ConnHdlr vc_conn;
/* Create a new BSSAP_ConnHdlr component */
vc_conn := MSC_ConnHdlr.create(g_bssmap_id & "-Conn-" & int2str(conn_ind.connectionId));
/* Create a new RAN_ConnHdlr component */
vc_conn := MSC_ConnHdlr.create(g_ran_id & "-Conn-" & int2str(conn_ind.connectionId));
/* connect it to the port */
connect(vc_conn:BSSAP, self:CLIENT);
/* start it */
@ -44,7 +44,7 @@ runs on BSSMAP_Emulation_CT return BSSAP_ConnHdlr {
/* Callback function from general BSSMAP_Emulation whenever a connectionless
* BSSMAP message arrives. Can retunr a PDU_BSSAP that should be sent in return */
private function UnitdataCallback(PDU_BSSAP bssap)
runs on BSSMAP_Emulation_CT return template PDU_BSSAP {
runs on RAN_Emulation_CT return template PDU_BSSAP {
var template PDU_BSSAP resp := omit;
if (match(bssap, tr_BSSMAP_Reset)) {
@ -54,7 +54,7 @@ runs on BSSMAP_Emulation_CT return template PDU_BSSAP {
return resp;
}
const BssmapOps MSC_BssmapOps := {
const RanOps MSC_RanOps := {
create_cb := refers(CreateCallback),
unitdata_cb := refers(UnitdataCallback),
decode_dtap := false,
@ -129,14 +129,14 @@ function main(integer connection_id, integer e1_timeslot) runs on MSC_ConnHdlr {
}
[g_state == MSC_STATE_WAIT_DLCX_ACK] BSSAP.receive(tr_DLCX_ACK) {
BSSAP.send(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_REQ);
BSSAP.send(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_REQ);
setverdict(pass);
self.stop;
}
/* TODO: CLEAR REQUEST from BSS */
[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
setverdict(fail);
self.stop;
}
@ -147,7 +147,7 @@ function main(integer connection_id, integer e1_timeslot) runs on MSC_ConnHdlr {
/* Guard timer has expired, close connection */
[] T.timeout {
BSSAP.send(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_REQ);
BSSAP.send(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_REQ);
setverdict(fail, "Timeout of guard timer");
self.stop;
}

View File

@ -16,7 +16,7 @@ import from L3_Templates all;
import from BSSAP_Types all;
import from BSSMAP_Templates all;
*/
import from BSSMAP_Emulation all;
import from RAN_Emulation all;
import from MGCP_Adapter all;
@ -26,7 +26,7 @@ type component MSC_CT {
/* component references */
var IPA_Emulation_CT vc_IPA;
var SCCP_CT vc_SCCP;
var BSSMAP_Emulation_CT vc_BSSMAP;
var RAN_Emulation_CT vc_BSSMAP;
var MGCP_Adapter_CT vc_MGCP_UDP;
/* test port to SCCP emulation */
port SCCPasp_PT SCCP;
@ -43,7 +43,7 @@ function main(charstring local_ip, PortNumber local_port,
/* create components */
vc_IPA := IPA_Emulation_CT.create(id & "-IPA");
vc_SCCP := SCCP_CT.create(id & "-SCCP");
vc_BSSMAP := BSSMAP_Emulation_CT.create(id & "-BSSMAP");
vc_BSSMAP := RAN_Emulation_CT.create(id & "-BSSMAP");
map(vc_IPA:IPA_PORT, system:IPA_CODEC_PT);
@ -64,7 +64,7 @@ function main(charstring local_ip, PortNumber local_port,
vc_IPA.start(IPA_Emulation.main_server(local_ip, local_port));
vc_SCCP.start(SCCPStart(sccp_pars));
vc_BSSMAP.start(BSSMAP_Emulation.main(MSC_ConnectionHandler.MSC_BssmapOps, id & "-BSSMAP"));
vc_BSSMAP.start(RAN_Emulation.main(MSC_ConnectionHandler.MSC_RanOps, id & "-BSSMAP"));
/* wait until termination of respective components */
vc_IPA.done;

View File

@ -47,7 +47,7 @@ FILES="RTP_EncDec.cc RTP_Types.ttcn"
gen_links $DIR $FILES
DIR=../library
FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp L3_Templates.ttcn BSSMAP_Templates.ttcn BSSMAP_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn BSSAP_CodecPort.ttcn"
FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp L3_Templates.ttcn BSSMAP_Templates.ttcn RAN_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn BSSAP_CodecPort.ttcn"
gen_links $DIR $FILES
ignore_pp_results

View File

@ -24,7 +24,7 @@ import from GSM_Types all;
import from IPL4asp_Types all;
import from BSSAP_Types all;
import from BSSAP_Adapter all;
import from RAN_Adapter all;
import from BSSAP_CodecPort all;
import from BSSMAP_Templates all;
import from IPA_Emulation all;
@ -82,7 +82,7 @@ type component test_CT extends CTRL_Adapter_CT {
var MGCP_Emulation_CT vc_MGCP;
port TELNETasp_PT BSCVTY;
var BSSAP_Adapter g_bssap;
var RAN_Adapter g_bssap;
/* for old legacy-tests only */
port BSSAP_CODEC_PT BSSAP;
@ -106,7 +106,7 @@ modulepar {
/* IP address at which the test binds */
charstring mp_test_ip := "127.0.0.1";
BSSAP_Configuration mp_bssap_cfg := {
RAN_Configuration mp_bssap_cfg := {
transport := BSSAP_TRANSPORT_AoIP,
sccp_service_type := "mtp3_itu",
sctp_addr := { 23905, "127.0.0.1", 2905, "127.0.0.1" },
@ -313,10 +313,10 @@ function f_init(integer nr_bts := NUM_BTS, boolean handler_mode := false) runs o
T_guard.start;
activate(as_Tguard());
/* Call a function of our 'parent component' BSSAP_Adapter_CT to start the
/* Call a function of our 'parent component' RAN_Adapter_CT to start the
* MSC-side BSSAP emulation */
if (handler_mode) {
f_bssap_init(g_bssap, mp_bssap_cfg, "VirtMSC", MSC_BssmapOps);
f_bssap_init(g_bssap, mp_bssap_cfg, "VirtMSC", MSC_RanOps);
f_bssap_start(g_bssap);
} else {
f_bssap_init(g_bssap, mp_bssap_cfg, "VirtMSC", omit);
@ -1625,10 +1625,10 @@ testcase TC_oml_unknown_unit_id() runs on test_CT {
/***********************************************************************
* "New world" test cases using RSL_Emulation + BSSMAP_Emulation
* "New world" test cases using RSL_Emulation + RAN_Emulation
***********************************************************************/
import from BSSMAP_Emulation all;
import from RAN_Emulation all;
import from RSL_Emulation all;
import from MSC_ConnectionHandler all;
@ -1636,7 +1636,7 @@ type function void_fn(charstring id) runs on MSC_ConnHdlr;
/* helper function to create and connect a MSC_ConnHdlr component */
private function f_connect_handler(inout MSC_ConnHdlr vc_conn) runs on test_CT {
connect(vc_conn:BSSMAPEM, g_bssap.vc_BSSMAP:PROC);
connect(vc_conn:RAN, g_bssap.vc_RAN:PROC);
connect(vc_conn:MGCP_PROC, vc_MGCP:MGCP_PROC);
connect(vc_conn:RSL, bts[0].rsl.vc_RSL:CLIENT_PT);
connect(vc_conn:RSL_PROC, bts[0].rsl.vc_RSL:RSL_PROC);
@ -1644,7 +1644,7 @@ private function f_connect_handler(inout MSC_ConnHdlr vc_conn) runs on test_CT {
connect(vc_conn:RSL1, bts[1].rsl.vc_RSL:CLIENT_PT);
connect(vc_conn:RSL1_PROC, bts[1].rsl.vc_RSL:RSL_PROC);
}
connect(vc_conn:BSSAP, g_bssap.vc_BSSMAP:CLIENT);
connect(vc_conn:BSSAP, g_bssap.vc_RAN:CLIENT);
connect(vc_conn:MGCP, vc_MGCP:MGCP_CLIENT);
}
@ -3096,7 +3096,7 @@ private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {
BSSAP.send(ts_BSSAP_Conn_Req(g_pars.handover.sccp_addr_bsc, g_pars.handover.sccp_addr_msc,
f_gen_handover_req()));
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND);
BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_CONF_IND);
/* The RSL Emulation magically accepts the Chan Activ behind the scenes. */
@ -3168,7 +3168,7 @@ private function f_tc_ho_in_fail_msc_clears(charstring id) runs on MSC_ConnHdlr
BSSAP.send(ts_BSSAP_Conn_Req(g_pars.handover.sccp_addr_bsc, g_pars.handover.sccp_addr_msc,
f_gen_handover_req()));
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND);
BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_CONF_IND);
/* The RSL Emulation magically accepts the Chan Activ behind the scenes. */
@ -3253,7 +3253,7 @@ private function f_tc_ho_in_fail_msc_clears_after_ho_detect(charstring id) runs
BSSAP.send(ts_BSSAP_Conn_Req(g_pars.handover.sccp_addr_bsc, g_pars.handover.sccp_addr_msc,
f_gen_handover_req()));
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND);
BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_CONF_IND);
/* The RSL Emulation magically accepts the Chan Activ behind the scenes. */
@ -3339,7 +3339,7 @@ private function f_tc_ho_in_fail_no_detect(charstring id) runs on MSC_ConnHdlr {
BSSAP.send(ts_BSSAP_Conn_Req(g_pars.handover.sccp_addr_bsc, g_pars.handover.sccp_addr_msc,
f_gen_handover_req()));
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND);
BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_CONF_IND);
/* The RSL Emulation magically accepts the Chan Activ behind the scenes. */
@ -3430,7 +3430,7 @@ private function f_tc_ho_in_fail_no_detect2(charstring id) runs on MSC_ConnHdlr
BSSAP.send(ts_BSSAP_Conn_Req(g_pars.handover.sccp_addr_bsc, g_pars.handover.sccp_addr_msc,
f_gen_handover_req()));
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND);
BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_CONF_IND);
/* The RSL Emulation magically accepts the Chan Activ behind the scenes. */

View File

@ -24,7 +24,7 @@ import from GSM_Types all;
import from IPL4asp_Types all;
import from BSSAP_Types all;
import from BSSAP_Adapter all;
import from RAN_Adapter all;
import from BSSAP_CodecPort all;
import from BSSMAP_Templates all;
import from IPA_Emulation all;
@ -51,7 +51,7 @@ import from L3_Templates all;
import from GSM_RR_Types all;
import from BSSMAP_Templates all;
import from BSSMAP_Emulation all;
import from RAN_Emulation all;
import from MSC_ConnectionHandler all;
import from BSC_Tests all;
@ -84,7 +84,7 @@ type component LCLS_MSC_ConnHdlr extends MSC_ConnHdlr {
/* port type between lcls_test_CT and LCLS_MSC_ConnHdlr */
type port LCLS_InterComp_PT message {
/* BSSAP from BSSA_ConnHdlr */
inout PDU_BSSAP, BSSAP_Conn_Prim, PDU_DTAP_MO, PDU_DTAP_MT,
inout PDU_BSSAP, RAN_Conn_Prim, PDU_DTAP_MO, PDU_DTAP_MT,
/* RSL from RSL_DchanHdlr */
RSLDC_ChanRqd, RSL_Message,
/* MGCP from MGCP_ConnHdlr */
@ -101,7 +101,7 @@ type enumerated LclsCompSync {
/* forward messages between the RSL/MGCP/BSSAP Emulation and the master component */
private altstep as_lcls_conn_hdlr_proxy() runs on LCLS_MSC_ConnHdlr {
var PDU_BSSAP bssap;
var BSSAP_Conn_Prim bssap_p;
var RAN_Conn_Prim bssap_p;
var PDU_DTAP_MO dtap_mo;
var PDU_DTAP_MT dtap_mt;
var MgcpCommand mgcp_cmd;
@ -109,7 +109,7 @@ private altstep as_lcls_conn_hdlr_proxy() runs on LCLS_MSC_ConnHdlr {
var RSL_Message rsl_msg;
/* from ConnHdlr to master process */
[] BSSAP.receive(PDU_BSSAP:?) -> value bssap { MASTER.send(bssap); }
[] BSSAP.receive(BSSAP_Conn_Prim:?) -> value bssap_p { MASTER.send(bssap_p); }
[] BSSAP.receive(RAN_Conn_Prim:?) -> value bssap_p { MASTER.send(bssap_p); }
[] BSSAP.receive(PDU_DTAP_MO:?) -> value dtap_mo { MASTER.send(dtap_mo); }
[] BSSAP.receive(PDU_DTAP_MT:?) -> value dtap_mt { MASTER.send(dtap_mt); }
[] MGCP.receive(MgcpCommand:?) -> value mgcp_cmd { MASTER.send(mgcp_cmd); }
@ -117,7 +117,7 @@ private altstep as_lcls_conn_hdlr_proxy() runs on LCLS_MSC_ConnHdlr {
[] RSL.receive(RSL_Message:?) -> value rsl_msg { MASTER.send(rsl_msg); }
/* from master process to ConnHdlr */
[] MASTER.receive(PDU_BSSAP:?) -> value bssap { BSSAP.send(bssap); }
[] MASTER.receive(BSSAP_Conn_Prim:?) -> value bssap_p { BSSAP.send(bssap_p); }
[] MASTER.receive(RAN_Conn_Prim:?) -> value bssap_p { BSSAP.send(bssap_p); }
[] MASTER.receive(PDU_DTAP_MO:?) -> value dtap_mo { BSSAP.send(dtap_mo); }
[] MASTER.receive(PDU_DTAP_MT:?) -> value dtap_mt { BSSAP.send(dtap_mt); }
[] MASTER.receive(MgcpCommand:?) -> value mgcp_cmd { MGCP.send(mgcp_cmd); }
@ -160,7 +160,7 @@ runs on LCLS_MSC_ConnHdlr {
/* helper function to create and connect a MSC_ConnHdlr component */
/* FIXME: Why can't we use BSC_Tests.f_connect_andler() ?!? */
private function f_connect_handler(inout LCLS_MSC_ConnHdlr vc_conn) runs on lcls_test_CT {
connect(vc_conn:BSSMAPEM, g_bssap.vc_BSSMAP:PROC);
connect(vc_conn:RAN, g_bssap.vc_RAN:PROC);
connect(vc_conn:MGCP_PROC, vc_MGCP:MGCP_PROC);
connect(vc_conn:RSL, bts[0].rsl.vc_RSL:CLIENT_PT);
connect(vc_conn:RSL_PROC, bts[0].rsl.vc_RSL:RSL_PROC);
@ -168,7 +168,7 @@ private function f_connect_handler(inout LCLS_MSC_ConnHdlr vc_conn) runs on lcls
connect(vc_conn:RSL1, bts[1].rsl.vc_RSL:CLIENT_PT);
connect(vc_conn:RSL1_PROC, bts[1].rsl.vc_RSL:RSL_PROC);
}
connect(vc_conn:BSSAP, g_bssap.vc_BSSMAP:CLIENT);
connect(vc_conn:BSSAP, g_bssap.vc_RAN:CLIENT);
connect(vc_conn:MGCP, vc_MGCP:MGCP_CLIENT);
}
@ -713,7 +713,7 @@ testcase TC_lcls_connect_clear() runs on lcls_test_CT {
}
}
[] CONN_A.receive(tr_BSSMAP_ClearComplete) {
CONN_A.send(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_REQ);
CONN_A.send(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_REQ);
}
[] CONN_B.receive(tr_BSSMAP_LclsNotificationSts(LCLS_STS_not_possible_ls));
}

View File

@ -6,7 +6,7 @@ import from Osmocom_Types all;
import from GSM_Types all;
import from SCCPasp_Types all;
import from BSSAP_Types all;
import from BSSMAP_Emulation all;
import from RAN_Emulation all;
import from BSSMAP_Templates all;
import from IPL4asp_Types all;
@ -330,14 +330,14 @@ altstep as_Media() runs on MSC_ConnHdlr {
}
/* this component represents a single subscriber connection at the MSC.
* There is a 1:1 mapping between SCCP connections and BSSAP_ConnHdlr components.
* We inherit all component variables, ports, functions, ... from BSSAP_ConnHdlr */
type component MSC_ConnHdlr extends BSSAP_ConnHdlr, RSL_DchanHdlr, MGCP_ConnHdlr {
* There is a 1:1 mapping between SCCP connections and RAN_ConnHdlr components.
* We inherit all component variables, ports, functions, ... from RAN_ConnHdlr */
type component MSC_ConnHdlr extends RAN_ConnHdlr, RSL_DchanHdlr, MGCP_ConnHdlr {
/* SCCP Connecction Identifier for the underlying SCCP connection */
var integer g_sccp_conn_id;
/* procedure port back to our parent (BSSMAP_Emulation_CT) for control */
port BSSMAPEM_PROC_PT BSSMAPEM;
/* procedure port back to our parent (RAN_Emulation_CT) for control */
port RAN_PROC_PT RAN;
port TELNETasp_PT BSCVTY;
var MediaState g_media;
@ -357,10 +357,10 @@ function f_MscConnHdlr_init(integer i, HostName bts, HostName mgw, BSSMAP_FIELD_
}
}
/* Callback function from general BSSMAP_Emulation whenever a connectionless
/* Callback function from general RAN_Emulation whenever a connectionless
* BSSMAP message arrives. Can retunr a PDU_BSSAP that should be sent in return */
private function UnitdataCallback(PDU_BSSAP bssap)
runs on BSSMAP_Emulation_CT return template PDU_BSSAP {
runs on RAN_Emulation_CT return template PDU_BSSAP {
var template PDU_BSSAP resp := omit;
/* answer all RESET with a RESET ACK */
@ -371,8 +371,8 @@ runs on BSSMAP_Emulation_CT return template PDU_BSSAP {
return resp;
}
const BssmapOps MSC_BssmapOps := {
create_cb := refers(BSSMAP_Emulation.ExpectedCreateCallback),
const RanOps MSC_RanOps := {
create_cb := refers(RAN_Emulation.ExpectedCreateCallback),
unitdata_cb := refers(UnitdataCallback),
decode_dtap := false,
role_ms := false,
@ -387,8 +387,8 @@ const MGCPOps MSC_MGCPOps := {
/* register an expect with the BSSMAP core */
private function f_create_bssmap_exp(octetstring l3_enc) runs on MSC_ConnHdlr {
BSSMAPEM.call(BSSMAPEM_register:{l3_enc, self}) {
[] BSSMAPEM.getreply(BSSMAPEM_register:{?, ?}) {};
RAN.call(RAN_register:{l3_enc, self}) {
[] RAN.getreply(RAN_register:{?, ?}) {};
}
}

View File

@ -67,7 +67,7 @@ FILES="TELNETasp_PT.cc TELNETasp_PT.hh TELNETasp_PortType.ttcn"
gen_links $DIR $FILES
DIR=../library
FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn Osmocom_VTY_Functions.ttcn Native_Functions.ttcn Native_FunctionDefs.cc IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp L3_Templates.ttcn BSSMAP_Templates.ttcn BSSMAP_Emulation.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn RSL_Emulation.ttcn MGCP_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc BSSAP_CodecPort.ttcn BSSAP_Adapter.ttcn Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn RTP_CodecPort.ttcn RTP_CodecPort_CtrlFunct.ttcn RTP_CodecPort_CtrlFunctDef.cc RTP_Emulation.ttcn IuUP_Types.ttcn IuUP_EncDec.cc IuUP_Emulation.ttcn SCCP_Templates.ttcn IPA_Testing.ttcn"
FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_Types.ttcn GSM_Types.ttcn Osmocom_VTY_Functions.ttcn Native_Functions.ttcn Native_FunctionDefs.cc IPA_Types.ttcn IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc IPA_Emulation.ttcnpp L3_Templates.ttcn BSSMAP_Templates.ttcn RAN_Emulation.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn RSL_Emulation.ttcn MGCP_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc BSSAP_CodecPort.ttcn RAN_Adapter.ttcn Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn RTP_CodecPort.ttcn RTP_CodecPort_CtrlFunct.ttcn RTP_CodecPort_CtrlFunctDef.cc RTP_Emulation.ttcn IuUP_Types.ttcn IuUP_EncDec.cc IuUP_Emulation.ttcn SCCP_Templates.ttcn IPA_Testing.ttcn"
gen_links $DIR $FILES
ignore_pp_results

View File

@ -1,14 +1,13 @@
module BSSAP_Adapter {
module RAN_Adapter {
/* This module implements a 'dumb' BSSAP adapter. It creates the M3UA and SCCP components and stacks a BSSAP
* codec port on top. As a result, it provides the ability to transceive SCCP-User-SAP primitives with
* deoded BSSAP payload. Use this if you want to have full control about what you transmit or receive,
* without any automatisms in place. Allows you to refuse connections or other abnormal behavior. */
/* This module implements a 'dumb' RAN adapter. It creates the M3UA and SCCP components and stacks a
* BSSAP/RANAP codec port on top. As a result, it provides the ability to transceive SCCP-User-SAP primitives
* with deoded BSSAP/RANAP payload. Use this if you want to have full control about what you transmit or
* receive, without any automatisms in place. Allows you to refuse connections or other abnormal behavior. */
import from General_Types all;
import from Osmocom_Types all;
import from M3UA_Types all;
import from M3UA_Emulation all;
import from MTP3asp_Types all;
import from MTP3asp_PortType all;
@ -23,11 +22,10 @@ import from SCCP_Templates all;
import from SCTPasp_Types all;
import from SCTPasp_PortType all;
import from BSSAP_CodecPort all;
import from BSSMAP_Templates all;
import from BSSMAP_Emulation all;
import from RAN_Emulation all;
type record BSSAP_Adapter {
type record RAN_Adapter {
/* component references */
M3UA_CT vc_M3UA, /* only in 3GPP AoIP */
IPA_Emulation_CT vc_IPA, /* only in SCCPlite */
@ -39,17 +37,17 @@ type record BSSAP_Adapter {
SCCP_PAR_Address sccp_addr_peer,
/* handler mode */
BSSMAP_Emulation_CT vc_BSSMAP
RAN_Emulation_CT vc_RAN
}
type enumerated BSSAP_Transport {
type enumerated RAN_Transport {
BSSAP_TRANSPORT_AoIP, /* 3GPP AoIP: SCCP over M3UA over SCTP */
BSSAP_TRANSPORT_SCCPlite_SERVER, /* SCCPlite: SCCP over IPA over TCP */
BSSAP_TRANSPORT_SCCPlite_CLIENT /* SCCPlite: SCCP over IPA over TCP */
};
type record BSSAP_Configuration {
BSSAP_Transport transport,
type record RAN_Configuration {
RAN_Transport transport,
charstring sccp_service_type,
SCTP_Association_Address sctp_addr,
integer own_pc,
@ -60,7 +58,7 @@ type record BSSAP_Configuration {
integer rctx
};
private function init_pars(inout BSSAP_Adapter ba, in BSSAP_Configuration cfg) {
private function init_pars(inout RAN_Adapter ba, in RAN_Configuration cfg) {
ba.sccp_pars := {
sio := {
ni := substr(oct2bit(cfg.sio),0,2),
@ -78,8 +76,8 @@ private function init_pars(inout BSSAP_Adapter ba, in BSSAP_Configuration cfg) {
}
function f_bssap_init(inout BSSAP_Adapter ba, in BSSAP_Configuration cfg, charstring id,
template BssmapOps ops) {
function f_bssap_init(inout RAN_Adapter ba, in RAN_Configuration cfg, charstring id,
template RanOps ops) {
init_pars(ba, cfg);
ops.sccp_addr_local := ba.sccp_addr_own;
ops.sccp_addr_peer := ba.sccp_addr_peer;
@ -87,7 +85,7 @@ function f_bssap_init(inout BSSAP_Adapter ba, in BSSAP_Configuration cfg, charst
/* create components */
ba.vc_SCCP := SCCP_CT.create(id & "-SCCP");
if (isvalue(ops)) {
ba.vc_BSSMAP := BSSMAP_Emulation_CT.create(id & "-BSSMAP");
ba.vc_RAN := RAN_Emulation_CT.create(id & "-RAN");
}
select (cfg.transport) {
case (BSSAP_TRANSPORT_AoIP) {
@ -131,7 +129,7 @@ function f_bssap_init(inout BSSAP_Adapter ba, in BSSAP_Configuration cfg, charst
disconnect(ba.vc_IPA:IPA_SP_PORT, ba.vc_WAIT:IPA_SP_PORT);
}
case else {
setverdict(fail, "Unsuppored BSSAP_Transport");
setverdict(fail, "Unsuppored RAN_Transport");
mtc.stop;
}
}
@ -142,20 +140,20 @@ function f_bssap_init(inout BSSAP_Adapter ba, in BSSAP_Configuration cfg, charst
//T.timeout;
log("Connecting BSSMAP Emulation to SCCP_SP_PORT and starting emulation");
/* connect BSSNAP component to upper side of SCCP */
connect(ba.vc_BSSMAP:BSSAP, ba.vc_SCCP:SCCP_SP_PORT);
connect(ba.vc_RAN:BSSAP, ba.vc_SCCP:SCCP_SP_PORT);
if (cfg.transport == BSSAP_TRANSPORT_SCCPlite_SERVER or
cfg.transport == BSSAP_TRANSPORT_SCCPlite_CLIENT) {
/* connect IPA MGCP port with BSSMAP MGCP port */
connect(ba.vc_IPA:IPA_MGCP_PORT, ba.vc_BSSMAP:MGCP);
connect(ba.vc_IPA:IPA_MGCP_PORT, ba.vc_RAN:MGCP);
}
/* start the BSSMAP emulation */
ba.vc_BSSMAP.start(BSSMAP_Emulation.main(valueof(ops), ""));
ba.vc_RAN.start(RAN_Emulation.main(valueof(ops), ""));
}
}
function f_bssap_start(inout BSSAP_Adapter ba) {
function f_bssap_start(inout RAN_Adapter ba) {
ba.vc_SCCP.start(SCCPStart(ba.sccp_pars));
}

View File

@ -1,16 +1,16 @@
module BSSMAP_Emulation {
module RAN_Emulation {
/* BSSMAP Emulation, runs on top of BSSAP_CodecPort. It multiplexes/demultiplexes
/* RAN Emulation, runs on top of BSSAP_CodecPort. It multiplexes/demultiplexes
* the individual connections, so there can be separate TTCN-3 components handling
* each of the connections.
*
* The BSSMAP_Emulation.main() function processes SCCP primitives from the SCCP
* The RAN_Emulation.main() function processes SCCP primitives from the SCCP
* stack via the BSSAP_CodecPort, and dispatches them to the per-connection components.
*
* Outbound BSSAP/SCCP connections are initiated by sending a BSSAP_Conn_Req primitive
* to the component running the BSSMAP_Emulation.main() function.
* to the component running the RAN_Emulation.main() function.
*
* For each new inbound connections, the BssmapOps.create_cb() is called. It can create
* For each new inbound connections, the RanOps.create_cb() is called. It can create
* or resolve a TTCN-3 component, and returns a component reference to which that inbound
* connection is routed/dispatched.
*
@ -19,7 +19,7 @@ module BSSMAP_Emulation {
* if you are simulating BTS + MSC, and first trigger a connection from BTS/RSL side in a
* component which then subsequently should also handle the MSC emulation.
*
* Inbound Unit Data messages (such as are dispatched to the BssmapOps.unitdata_cb() callback,
* Inbound Unit Data messages (such as are dispatched to the RanOps.unitdata_cb() callback,
* which is registered with an argument to the main() function below.
*
* (C) 2017-2018 by Harald Welte <laforge@gnumonks.org>
@ -44,15 +44,15 @@ import from MobileL3_Types all;
/* General "base class" component definition, of which specific implementations
* derive themselves by means of the "extends" feature */
type component BSSAP_ConnHdlr {
type component RAN_ConnHdlr {
/* port towards MSC Emulator core / SCCP connection dispatchar */
port BSSAP_Conn_PT BSSAP;
port RAN_Conn_PT BSSAP;
/* procedure based port to register for incoming connections */
port BSSMAPEM_PROC_PT BSSAP_PROC;
port RAN_PROC_PT BSSAP_PROC;
}
/* Auxiliary primitive that can happen on the port between per-connection client and this dispatcher */
type enumerated BSSAP_Conn_Prim {
type enumerated RAN_Conn_Prim {
/* SCCP tell us that connection was released */
MSC_CONN_PRIM_DISC_IND,
/* we tell SCCP to release connection */
@ -110,11 +110,11 @@ template BSSAP_Conn_Req ts_BSSAP_Conn_Req(SCCP_PAR_Address peer, SCCP_PAR_Addres
/* port between individual per-connection components and this dispatcher */
type port BSSAP_Conn_PT message {
type port RAN_Conn_PT message {
/* BSSAP or direct DTAP messages from/to clients */
inout PDU_BSSAP, PDU_DTAP_MO, PDU_DTAP_MT,
/* misc indications / requests between SCCP and client */
BSSAP_Conn_Prim,
RAN_Conn_Prim,
/* Client requests us to create SCCP Connection */
BSSAP_Conn_Req,
/* MGCP, only used for IPA SCCPlite (MGCP in IPA mux) */
@ -125,7 +125,7 @@ type port BSSAP_Conn_PT message {
/* represents a single BSSAP connection over SCCP */
type record ConnectionData {
/* reference to the instance of the per-connection component */
BSSAP_ConnHdlr comp_ref,
RAN_ConnHdlr comp_ref,
integer sccp_conn_id,
/* most recent MGCP transaction ID (Used on MSC side) */
MgcpTransId mgcp_trans_id optional,
@ -136,16 +136,16 @@ type record ConnectionData {
}
type record ImsiMapping {
BSSAP_ConnHdlr comp_ref,
RAN_ConnHdlr comp_ref,
hexstring imsi optional,
OCT4 tmsi
}
type component BSSMAP_Emulation_CT {
type component RAN_Emulation_CT {
/* SCCP port on the bottom side, using ASP primitives */
port BSSAP_CODEC_PT BSSAP;
/* BSSAP port to the per-connection clients */
port BSSAP_Conn_PT CLIENT;
port RAN_Conn_PT CLIENT;
/* MGCP port */
port IPA_MGCP_PT MGCP;
@ -159,15 +159,15 @@ type component BSSMAP_Emulation_CT {
var ImsiMapping ImsiTable[16];
/* procedure based port to register for incoming connections */
port BSSMAPEM_PROC_PT PROC;
port RAN_PROC_PT PROC;
var charstring g_bssmap_id;
var charstring g_ran_id;
var integer g_next_e1_ts := 1;
var BssmapOps g_bssmap_ops;
var RanOps g_ran_ops;
};
private function f_conn_id_known(integer sccp_conn_id)
runs on BSSMAP_Emulation_CT return boolean {
runs on RAN_Emulation_CT return boolean {
var integer i;
for (i := 0; i < sizeof(ConnectionTable); i := i+1) {
if (ConnectionTable[i].sccp_conn_id == sccp_conn_id){
@ -177,8 +177,8 @@ runs on BSSMAP_Emulation_CT return boolean {
return false;
}
private function f_comp_known(BSSAP_ConnHdlr client)
runs on BSSMAP_Emulation_CT return boolean {
private function f_comp_known(RAN_ConnHdlr client)
runs on RAN_Emulation_CT return boolean {
var integer i;
for (i := 0; i < sizeof(ConnectionTable); i := i+1) {
if (ConnectionTable[i].comp_ref == client) {
@ -189,7 +189,7 @@ runs on BSSMAP_Emulation_CT return boolean {
}
private function f_cic_known(integer cic)
runs on BSSMAP_Emulation_CT return boolean {
runs on RAN_Emulation_CT return boolean {
var integer i;
for (i := 0; i < sizeof(ConnectionTable); i := i+1) {
if (ConnectionTable[i].cic == cic) {
@ -201,32 +201,32 @@ runs on BSSMAP_Emulation_CT return boolean {
/* resolve component reference by connection ID */
private function f_comp_by_conn_id(integer sccp_conn_id)
runs on BSSMAP_Emulation_CT return BSSAP_ConnHdlr {
runs on RAN_Emulation_CT return RAN_ConnHdlr {
var integer i;
for (i := 0; i < sizeof(ConnectionTable); i := i+1) {
if (ConnectionTable[i].sccp_conn_id == sccp_conn_id) {
return ConnectionTable[i].comp_ref;
}
}
setverdict(fail, "BSSMAP Connection table not found by SCCP Connection ID ", sccp_conn_id);
setverdict(fail, "RAN Connection table not found by SCCP Connection ID ", sccp_conn_id);
mtc.stop;
}
/* resolve component reference by CIC */
private function f_comp_by_mgcp_tid(MgcpTransId tid)
runs on BSSMAP_Emulation_CT return BSSAP_ConnHdlr {
runs on RAN_Emulation_CT return RAN_ConnHdlr {
var integer i;
for (i := 0; i < sizeof(ConnectionTable); i := i+1) {
if (ConnectionTable[i].mgcp_trans_id == tid) {
return ConnectionTable[i].comp_ref;
}
}
setverdict(fail, "BSSMAP Connection table not found by MGCP Transaction ID ", tid);
setverdict(fail, "RAN Connection table not found by MGCP Transaction ID ", tid);
mtc.stop;
}
private function f_comp_store_mgcp_tid(BSSAP_ConnHdlr client, MgcpTransId tid)
runs on BSSMAP_Emulation_CT {
private function f_comp_store_mgcp_tid(RAN_ConnHdlr client, MgcpTransId tid)
runs on RAN_Emulation_CT {
var integer i;
for (i := 0; i < sizeof(ConnectionTable); i := i+1) {
if (ConnectionTable[i].comp_ref == client) {
@ -234,24 +234,24 @@ runs on BSSMAP_Emulation_CT {
return;
}
}
setverdict(fail, "BSSMAP Connection table not found by component ", client);
setverdict(fail, "RAN Connection table not found by component ", client);
mtc.stop;
}
private function f_comp_by_cic(integer cic)
runs on BSSMAP_Emulation_CT return BSSAP_ConnHdlr {
runs on RAN_Emulation_CT return RAN_ConnHdlr {
var integer i;
for (i := 0; i < sizeof(ConnectionTable); i := i+1) {
if (ConnectionTable[i].cic == cic) {
return ConnectionTable[i].comp_ref;
}
}
setverdict(fail, "BSSMAP Connection table not found by CIC ", cic);
setverdict(fail, "RAN Connection table not found by CIC ", cic);
mtc.stop;
}
private function f_comp_store_cic(BSSAP_ConnHdlr client, integer cic)
runs on BSSMAP_Emulation_CT {
private function f_comp_store_cic(RAN_ConnHdlr client, integer cic)
runs on RAN_Emulation_CT {
var integer i;
for (i := 0; i < sizeof(ConnectionTable); i := i+1) {
if (ConnectionTable[i].comp_ref == client) {
@ -259,36 +259,36 @@ runs on BSSMAP_Emulation_CT {
return;
}
}
setverdict(fail, "BSSMAP Connection table not found by component ", client);
setverdict(fail, "RAN Connection table not found by component ", client);
mtc.stop;
}
/* resolve connection ID by component reference */
private function f_conn_id_by_comp(BSSAP_ConnHdlr client)
runs on BSSMAP_Emulation_CT return integer {
private function f_conn_id_by_comp(RAN_ConnHdlr client)
runs on RAN_Emulation_CT return integer {
for (var integer i := 0; i < sizeof(ConnectionTable); i := i+1) {
if (ConnectionTable[i].comp_ref == client) {
return ConnectionTable[i].sccp_conn_id;
}
}
setverdict(fail, "BSSMAP Connection table not found by component ", client);
setverdict(fail, "RAN Connection table not found by component ", client);
mtc.stop;
}
/* resolve ConnectionTable index component reference */
private function f_idx_by_comp(BSSAP_ConnHdlr client)
runs on BSSMAP_Emulation_CT return integer {
private function f_idx_by_comp(RAN_ConnHdlr client)
runs on RAN_Emulation_CT return integer {
for (var integer i := 0; i < sizeof(ConnectionTable); i := i+1) {
if (ConnectionTable[i].comp_ref == client) {
return i;
}
}
setverdict(fail, "BSSMAP Connection table not found by component ", client);
setverdict(fail, "RAN Connection table not found by component ", client);
mtc.stop;
}
private function f_gen_conn_id()
runs on BSSMAP_Emulation_CT return integer {
runs on RAN_Emulation_CT return integer {
var integer conn_id;
do {
@ -299,7 +299,7 @@ runs on BSSMAP_Emulation_CT return integer {
}
private function f_conn_table_init()
runs on BSSMAP_Emulation_CT {
runs on RAN_Emulation_CT {
for (var integer i := 0; i < sizeof(ConnectionTable); i := i+1) {
ConnectionTable[i].comp_ref := null;
ConnectionTable[i].sccp_conn_id := -1;
@ -314,8 +314,8 @@ runs on BSSMAP_Emulation_CT {
}
}
private function f_conn_table_add(BSSAP_ConnHdlr comp_ref, integer sccp_conn_id)
runs on BSSMAP_Emulation_CT {
private function f_conn_table_add(RAN_ConnHdlr comp_ref, integer sccp_conn_id)
runs on RAN_Emulation_CT {
for (var integer i := 0; i < sizeof(ConnectionTable); i := i+1) {
if (ConnectionTable[i].sccp_conn_id == -1) {
ConnectionTable[i].comp_ref := comp_ref;
@ -325,11 +325,11 @@ runs on BSSMAP_Emulation_CT {
return;
}
}
testcase.stop("BSSMAP Connection table full!");
testcase.stop("RAN Connection table full!");
}
private function f_conn_table_del(integer sccp_conn_id)
runs on BSSMAP_Emulation_CT {
runs on RAN_Emulation_CT {
for (var integer i := 0; i < sizeof(ConnectionTable); i := i+1) {
if (ConnectionTable[i].sccp_conn_id == sccp_conn_id) {
log("Deleted conn table entry ", i,
@ -339,12 +339,12 @@ runs on BSSMAP_Emulation_CT {
return
}
}
setverdict(fail, "BSSMAP Connection table attempt to delete non-existant ", sccp_conn_id);
setverdict(fail, "RAN Connection table attempt to delete non-existant ", sccp_conn_id);
mtc.stop;
}
private function f_imsi_table_find(hexstring imsi, template OCT4 tmsi)
runs on BSSMAP_Emulation_CT return BSSAP_ConnHdlr {
runs on RAN_Emulation_CT return RAN_ConnHdlr {
for (var integer i := 0; i < sizeof(ImsiTable); i := i+1) {
if (ImsiTable[i].imsi == imsi or
isvalue(tmsi) and match(ImsiTable[i].tmsi, tmsi)) {
@ -355,8 +355,8 @@ runs on BSSMAP_Emulation_CT return BSSAP_ConnHdlr {
}
/* handle (optional) userData portion of various primitives and dispatch it to the client */
private function f_handle_userData(BSSAP_ConnHdlr client, PDU_BSSAP bssap)
runs on BSSMAP_Emulation_CT {
private function f_handle_userData(RAN_ConnHdlr client, PDU_BSSAP bssap)
runs on RAN_Emulation_CT {
/* decode + send decoded BSSAP to client */
if (ischosen(bssap.pdu.bssmap)) {
@ -370,8 +370,8 @@ runs on BSSMAP_Emulation_CT {
}
}
if (ischosen(bssap.pdu.dtap) and g_bssmap_ops.decode_dtap) {
if (g_bssmap_ops.role_ms) {
if (ischosen(bssap.pdu.dtap) and g_ran_ops.decode_dtap) {
if (g_ran_ops.role_ms) {
/* we are the MS, so any message to us must be MT */
var PDU_DTAP_MT mt := {
dlci := bssap.dlci,
@ -394,16 +394,16 @@ runs on BSSMAP_Emulation_CT {
/* call-back type, to be provided by specific implementation; called when new SCCP connection
* arrives */
type function BssmapCreateCallback(BSSAP_N_CONNECT_ind conn_ind, charstring id)
runs on BSSMAP_Emulation_CT return BSSAP_ConnHdlr;
runs on RAN_Emulation_CT return RAN_ConnHdlr;
type function BssmapUnitdataCallback(PDU_BSSAP bssap)
runs on BSSMAP_Emulation_CT return template PDU_BSSAP;
runs on RAN_Emulation_CT return template PDU_BSSAP;
/* handle common Unitdata such as Paging */
private function CommonBssmapUnitdataCallback(PDU_BSSAP bssap)
runs on BSSMAP_Emulation_CT return template PDU_BSSAP {
runs on RAN_Emulation_CT return template PDU_BSSAP {
if (match(bssap, tr_BSSMAP_Paging)) {
var BSSAP_ConnHdlr client := null;
var RAN_ConnHdlr client := null;
client := f_imsi_table_find(bssap.pdu.bssmap.paging.iMSI.digits,
bssap.pdu.bssmap.paging.tMSI.tmsiOctets);
if (client != null) {
@ -417,10 +417,10 @@ runs on BSSMAP_Emulation_CT return template PDU_BSSAP {
log("CommonBssmapUnitdataCallback: Not a paging message");
}
/* ELSE: handle in user callback */
return g_bssmap_ops.unitdata_cb.apply(bssap);
return g_ran_ops.unitdata_cb.apply(bssap);
}
type record BssmapOps {
type record RanOps {
BssmapCreateCallback create_cb,
BssmapUnitdataCallback unitdata_cb,
boolean decode_dtap,
@ -472,7 +472,7 @@ private function f_bssap_l3_is_rr(PDU_BSSAP bssap) return boolean {
return false;
}
private altstep as_reset_ack() runs on BSSMAP_Emulation_CT {
private altstep as_reset_ack() runs on RAN_Emulation_CT {
var BSSAP_N_UNITDATA_ind ud_ind;
[] BSSAP.receive(tr_BSSAP_UNITDATA_ind(?, ?, tr_BSSMAP_Reset)) -> value ud_ind {
log("Respoding to inbound RESET with RESET-ACK");
@ -483,7 +483,7 @@ private altstep as_reset_ack() runs on BSSMAP_Emulation_CT {
}
private function f_bssap_wait_for_reset() runs on BSSMAP_Emulation_CT {
private function f_bssap_wait_for_reset() runs on RAN_Emulation_CT {
var BSSAP_N_UNITDATA_ind ud_ind;
timer T := 20.0;
@ -504,7 +504,7 @@ private function f_bssap_wait_for_reset() runs on BSSMAP_Emulation_CT {
}
}
function f_bssap_reset(SCCP_PAR_Address peer, SCCP_PAR_Address own) runs on BSSMAP_Emulation_CT {
function f_bssap_reset(SCCP_PAR_Address peer, SCCP_PAR_Address own) runs on RAN_Emulation_CT {
timer T := 5.0;
BSSAP.send(ts_BSSAP_UNITDATA_req(peer, own, ts_BSSMAP_Reset(0)));
@ -522,10 +522,10 @@ function f_bssap_reset(SCCP_PAR_Address peer, SCCP_PAR_Address own) runs on BSSM
}
}
function main(BssmapOps ops, charstring id) runs on BSSMAP_Emulation_CT {
function main(RanOps ops, charstring id) runs on RAN_Emulation_CT {
g_bssmap_id := id;
g_bssmap_ops := ops;
g_ran_id := id;
g_ran_ops := ops;
f_conn_table_init();
f_expect_table_init();
@ -541,13 +541,13 @@ function main(BssmapOps ops, charstring id) runs on BSSMAP_Emulation_CT {
var BSSAP_N_DATA_ind data_ind;
var BSSAP_N_DISCONNECT_ind disc_ind;
var BSSAP_Conn_Req creq;
var BSSAP_ConnHdlr vc_conn;
var RAN_ConnHdlr vc_conn;
var PDU_BSSAP bssap;
var PDU_DTAP_MO dtap_mo;
var PDU_DTAP_MT dtap_mt;
var MgcpCommand mgcp_req;
var MgcpResponse mgcp_resp;
var BSSAP_ConnHdlr vc_hdlr;
var RAN_ConnHdlr vc_hdlr;
var octetstring l3_info;
var hexstring imsi;
var OCT4 tmsi;
@ -590,7 +590,7 @@ function main(BssmapOps ops, charstring id) runs on BSSMAP_Emulation_CT {
f_handle_userData(vc_conn, disc_ind.userData);
}
/* notify client about termination */
var BSSAP_Conn_Prim prim := MSC_CONN_PRIM_DISC_IND;
var RAN_Conn_Prim prim := MSC_CONN_PRIM_DISC_IND;
CLIENT.send(prim) to vc_conn;
f_conn_table_del(disc_ind.connectionId);
/* TOOD: return confirm to other side? */
@ -599,7 +599,7 @@ function main(BssmapOps ops, charstring id) runs on BSSMAP_Emulation_CT {
/* SCCP -> Client: connection confirm for outbound connection */
[] BSSAP.receive(BSSAP_N_CONNECT_cfm:?) -> value conn_cfm {
vc_conn := f_comp_by_conn_id(conn_cfm.connectionId);
var BSSAP_Conn_Prim prim := MSC_CONN_PRIM_CONF_IND;
var RAN_Conn_Prim prim := MSC_CONN_PRIM_CONF_IND;
CLIENT.send(prim) to vc_conn;
/* handle user payload */
if (ispresent(conn_cfm.userData)) {
@ -608,7 +608,7 @@ function main(BssmapOps ops, charstring id) runs on BSSMAP_Emulation_CT {
}
/* Disconnect request client -> SCCP */
[] CLIENT.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_REQ) -> sender vc_conn {
[] CLIENT.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_REQ) -> sender vc_conn {
var integer conn_id := f_conn_id_by_comp(vc_conn);
BSSAP.send(ts_BSSAP_DISC_req(conn_id, 0));
f_conn_table_del(conn_id);
@ -636,7 +636,7 @@ function main(BssmapOps ops, charstring id) runs on BSSMAP_Emulation_CT {
/* InitialL3 contains RR (PAG RESP) or MM (CM SRV REQ), we must increment
* counter only on MM/CC/SS, but not on RR */
if (g_bssmap_ops.role_ms and not f_bssap_l3_is_rr(creq.bssap)) {
if (g_ran_ops.role_ms and not f_bssap_l3_is_rr(creq.bssap)) {
/* we have just sent the first MM message, increment the counter */
var integer idx := f_idx_by_comp(vc_conn);
ConnectionTable[idx].n_sd[0] := 1;
@ -651,7 +651,7 @@ function main(BssmapOps ops, charstring id) runs on BSSMAP_Emulation_CT {
BSSAP.send(ts_BSSAP_DATA_req(conn_id, bssap));
}
[g_bssmap_ops.role_ms] CLIENT.receive(PDU_DTAP_MO:?) -> value dtap_mo sender vc_conn {
[g_ran_ops.role_ms] CLIENT.receive(PDU_DTAP_MO:?) -> value dtap_mo sender vc_conn {
var integer idx := f_idx_by_comp(vc_conn);
/* convert from decoded DTAP to encoded DTAP */
var octetstring l3_enc := enc_PDU_ML3_MS_NW(dtap_mo.dtap);
@ -663,7 +663,7 @@ function main(BssmapOps ops, charstring id) runs on BSSMAP_Emulation_CT {
BSSAP.send(ts_BSSAP_DATA_req(ConnectionTable[idx].sccp_conn_id, bssap));
}
[not g_bssmap_ops.role_ms] CLIENT.receive(PDU_DTAP_MT:?) -> value dtap_mt sender vc_conn {
[not g_ran_ops.role_ms] CLIENT.receive(PDU_DTAP_MT:?) -> value dtap_mt sender vc_conn {
var integer conn_id := f_conn_id_by_comp(vc_conn);
/* convert from decoded DTAP to encoded DTAP */
var octetstring l3_enc := enc_PDU_ML3_NW_MS(dtap_mt.dtap);
@ -712,14 +712,14 @@ function main(BssmapOps ops, charstring id) runs on BSSMAP_Emulation_CT {
}
[] PROC.getcall(BSSMAPEM_register:{?,?}) -> param(l3_info, vc_hdlr) {
[] PROC.getcall(RAN_register:{?,?}) -> param(l3_info, vc_hdlr) {
f_create_expect(l3_info, vc_hdlr);
PROC.reply(BSSMAPEM_register:{l3_info, vc_hdlr}) to vc_hdlr;
PROC.reply(RAN_register:{l3_info, vc_hdlr}) to vc_hdlr;
}
[] PROC.getcall(BSSMAPEM_register_imsi:{?,?,?}) -> param(imsi, tmsi, vc_hdlr) {
[] PROC.getcall(RAN_register_imsi:{?,?,?}) -> param(imsi, tmsi, vc_hdlr) {
f_create_imsi(imsi, tmsi, vc_hdlr);
PROC.reply(BSSMAPEM_register_imsi:{imsi, tmsi, vc_hdlr}) to vc_hdlr;
PROC.reply(RAN_register_imsi:{imsi, tmsi, vc_hdlr}) to vc_hdlr;
}
@ -742,23 +742,23 @@ type record ExpectData {
/* L3 payload based on which we can match it */
octetstring l3_payload optional,
/* component reference for this connection */
BSSAP_ConnHdlr vc_conn
RAN_ConnHdlr vc_conn
}
/* procedure based port to register for incoming connections */
signature BSSMAPEM_register(in octetstring l3, in BSSAP_ConnHdlr hdlr);
signature RAN_register(in octetstring l3, in RAN_ConnHdlr hdlr);
/* procedure based port to register for incoming IMSI/TMSI */
signature BSSMAPEM_register_imsi(in hexstring imsi, in OCT4 tmsi, in BSSAP_ConnHdlr hdlr);
signature RAN_register_imsi(in hexstring imsi, in OCT4 tmsi, in RAN_ConnHdlr hdlr);
type port BSSMAPEM_PROC_PT procedure {
inout BSSMAPEM_register, BSSMAPEM_register_imsi;
type port RAN_PROC_PT procedure {
inout RAN_register, RAN_register_imsi;
} with { extension "internal" };
/* CreateCallback that can be used as create_cb and will use the expectation table */
function ExpectedCreateCallback(BSSAP_N_CONNECT_ind conn_ind, charstring id)
runs on BSSMAP_Emulation_CT return BSSAP_ConnHdlr {
var BSSAP_ConnHdlr ret := null;
runs on RAN_Emulation_CT return RAN_ConnHdlr {
var RAN_ConnHdlr ret := null;
var octetstring l3_info;
var integer i;
@ -788,8 +788,8 @@ runs on BSSMAP_Emulation_CT return BSSAP_ConnHdlr {
return ret;
}
private function f_create_expect(octetstring l3, BSSAP_ConnHdlr hdlr)
runs on BSSMAP_Emulation_CT {
private function f_create_expect(octetstring l3, RAN_ConnHdlr hdlr)
runs on RAN_Emulation_CT {
var integer i;
for (i := 0; i < sizeof(ExpectTable); i := i+1) {
if (not ispresent(ExpectTable[i].l3_payload)) {
@ -802,8 +802,8 @@ runs on BSSMAP_Emulation_CT {
testcase.stop("No space left in ExpectTable");
}
private function f_create_imsi(hexstring imsi, OCT4 tmsi, BSSAP_ConnHdlr hdlr)
runs on BSSMAP_Emulation_CT {
private function f_create_imsi(hexstring imsi, OCT4 tmsi, RAN_ConnHdlr hdlr)
runs on RAN_Emulation_CT {
for (var integer i := 0; i < sizeof(ImsiTable); i := i+1) {
if (not ispresent(ImsiTable[i].imsi)) {
ImsiTable[i].imsi := imsi;
@ -818,17 +818,17 @@ runs on BSSMAP_Emulation_CT {
private function f_expect_table_init()
runs on BSSMAP_Emulation_CT {
runs on RAN_Emulation_CT {
for (var integer i := 0; i < sizeof(ExpectTable); i := i+1) {
ExpectTable[i].l3_payload := omit;
}
}
/* helper function for clients to register their IMSI/TMSI */
function f_bssmap_register_imsi(hexstring imsi, OCT4 tmsi)
runs on BSSAP_ConnHdlr {
BSSAP_PROC.call(BSSMAPEM_register_imsi:{imsi, tmsi, self}) {
[] BSSAP_PROC.getreply(BSSMAPEM_register_imsi:{?,?,?}) {};
function f_ran_register_imsi(hexstring imsi, OCT4 tmsi)
runs on RAN_ConnHdlr {
BSSAP_PROC.call(RAN_register_imsi:{imsi, tmsi, self}) {
[] BSSAP_PROC.getreply(RAN_register_imsi:{?,?,?}) {};
}
}

View File

@ -7,7 +7,7 @@ import from GSM_Types all;
import from IPL4asp_Types all;
import from SCCPasp_Types all;
import from BSSAP_Types all;
import from BSSMAP_Emulation all;
import from RAN_Emulation all;
import from BSSMAP_Templates all;
import from GSUP_Types all;
@ -42,7 +42,7 @@ import from Osmocom_VTY_Functions all;
import from SGsAP_Emulation all;
/* this component represents a single subscriber connection */
type component BSC_ConnHdlr extends BSSAP_ConnHdlr, MNCC_ConnHdlr, GSUP_ConnHdlr, MGCP_ConnHdlr, SMPP_ConnHdlr, CTRL_Adapter_CT, SGsAP_ConnHdlr {
type component BSC_ConnHdlr extends RAN_ConnHdlr, MNCC_ConnHdlr, GSUP_ConnHdlr, MGCP_ConnHdlr, SMPP_ConnHdlr, CTRL_Adapter_CT, SGsAP_ConnHdlr {
var BSC_ConnHdlrPars g_pars;
timer g_Tguard := 60.0;
port TELNETasp_PT MSCVTY;
@ -155,10 +155,10 @@ function f_init_handler(BSC_ConnHdlrPars pars, float t_guard := 60.0) runs on BS
}
/* Callback function from general BSSMAP_Emulation whenever a connectionless
/* Callback function from general RAN_Emulation whenever a connectionless
* BSSMAP message arrives. Canreturn a PDU_BSSAPthat should be sent in return */
private function BscUnitdataCallback(PDU_BSSAP bssap)
runs on BSSMAP_Emulation_CT return template PDU_BSSAP {
runs on RAN_Emulation_CT return template PDU_BSSAP {
var template PDU_BSSAP resp := omit;
log("BSSMAP_BscUnitdataCallback");
@ -172,9 +172,9 @@ runs on BSSMAP_Emulation_CT return template PDU_BSSAP {
return resp;
}
const BssmapOps BSC_BssmapOps := {
const RanOps BSC_RanOps := {
/* Create call-back for inbound connections from MSC (hand-over) */
create_cb := refers(BSSMAP_Emulation.ExpectedCreateCallback),
create_cb := refers(RAN_Emulation.ExpectedCreateCallback),
unitdata_cb := refers(BscUnitdataCallback),
decode_dtap := true,
role_ms := true,
@ -196,7 +196,7 @@ const MnccOps BCC_MnccOps := {
/* Encode 'l3' and ask BSSMAP_Emulation to create new connection with COMPL L3 INFO */
/* Encode 'l3' and ask RAN_Emulation to create new connection with COMPL L3 INFO */
function f_bssap_compl_l3(PDU_ML3_MS_NW l3)
runs on BSC_ConnHdlr {
log("Sending COMPL L3: ", l3);
@ -204,8 +204,8 @@ runs on BSC_ConnHdlr {
BSSAP.send(ts_BSSAP_Conn_Req(g_pars.sccp_addr_peer, g_pars.sccp_addr_own,
valueof(ts_BSSMAP_ComplL3(g_pars.cell_id, l3_enc))));
alt {
[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND) {}
[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_CONF_IND) {}
[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
setverdict(fail, "DISC.ind from SCCP");
mtc.stop;
}
@ -386,12 +386,12 @@ runs on BSC_ConnHdlr {
/* FIXME: there could be pending SMS or other common procedures by the MSC, let's ignore them */
BSSAP.receive(tr_BSSMAP_ClearCommand);
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
setverdict(pass);
}
function f_foo() runs on BSC_ConnHdlr{
/* SCCP CC handled by BSSMAP_Emulation_CT.main() */
/* SCCP CC handled by RAN_Emulation_CT.main() */
/* Expect auth, if enabled */
/* TODO: ISD */
@ -484,7 +484,7 @@ runs on BSC_ConnHdlr {
var MNCC_PDU mncc;
var MgcpCommand mgcp_cmd;
f_bssmap_register_imsi(g_pars.imsi, g_pars.tmsi);
f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
f_establish_fully(EST_TYPE_PAG_RESP);
@ -560,7 +560,7 @@ runs on BSC_ConnHdlr {
f_mt_call_initate(cpars);
/* BSC <- MSC: Expect paging. FIXME: By TMSI or not? */
f_bssmap_register_imsi(g_pars.imsi, g_pars.tmsi);
f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
BSSAP.receive(tr_BSSMAP_Paging(g_pars.imsi));
/* Complete the call via BSSAP */
@ -690,7 +690,7 @@ runs on BSC_ConnHdlr {
interleave {
[] BSSAP.receive(t_clear) {
BSSAP.send(ts_BSSMAP_ClearComplete);
BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
}
[] MGCP.receive(tr_DLCX(?)) -> value mgcp_cmd {
if (respond_to_dlcx) {
@ -790,7 +790,7 @@ altstep as_clear_cmd_compl_disc(float t := 5.0) runs on BSC_ConnHdlr {
[] BSSAP.receive(tr_BSSMAP_ClearCommand) {
BSSAP.send(ts_BSSMAP_ClearComplete);
alt {
[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
setverdict(pass);
}
[] BSSAP.receive {

View File

@ -36,10 +36,10 @@ import from GSUP_Types all;
import from IPA_Emulation all;
import from BSSAP_Types all;
import from BSSAP_Adapter all;
import from RAN_Adapter all;
import from BSSAP_CodecPort all;
import from BSSMAP_Templates all;
import from BSSMAP_Emulation all;
import from RAN_Emulation all;
import from BSC_ConnectionHandler all;
import from SGsAP_Templates all;
@ -66,7 +66,7 @@ import from DNS_Helpers all;
import from TCCConversion_Functions all;
const integer NUM_BSC := 2;
type record of BSSAP_Configuration BSSAP_Configurations;
type record of RAN_Configuration RAN_Configurations;
/* Needed for SGsAP SMS */
import from MobileL3_SMS_Types all;
@ -74,7 +74,7 @@ import from MobileL3_SMS_Types all;
type component MTC_CT extends CTRL_Adapter_CT {
var boolean g_initialized := false;
var BSSAP_Adapter g_bssap[NUM_BSC];
var RAN_Adapter g_bssap[NUM_BSC];
/* no 'adapter_CT' for MNCC or GSUP */
var MNCC_Emulation_CT vc_MNCC;
@ -121,7 +121,7 @@ modulepar {
charstring mp_mme_name := "mmec01.mmegi0001.mme.epc.mnc070.mcc901.3gppnetwork.org";
charstring mp_vlr_name := "vlr.example.net";
BSSAP_Configurations mp_bssap_cfg := {
RAN_Configurations mp_bssap_cfg := {
{
sccp_service_type := "mtp3_itu",
sctp_addr := { 23905, "127.0.0.1", 2905, "127.0.0.1" },
@ -277,7 +277,7 @@ function f_init(integer num_bsc := 1, boolean sgsap := false, boolean gsup := tr
for (var integer i := 0; i < num_bsc; i := i + 1) {
if (isbound(mp_bssap_cfg[i])) {
f_bssap_init(g_bssap[i], mp_bssap_cfg[i], "MSC_Test_" & int2str(i), BSC_BssmapOps);
f_bssap_init(g_bssap[i], mp_bssap_cfg[i], "MSC_Test_" & int2str(i), BSC_RanOps);
f_bssap_start(g_bssap[i]);
} else {
testcase.stop("missing BSSAP configuration");
@ -522,8 +522,8 @@ function f_start_handler_with_pars(void_fn fn, BSC_ConnHdlrPars pars) runs on MT
vc_conn := BSC_ConnHdlr.create(id);
/* BSSMAP part / A interface */
connect(vc_conn:BSSAP, g_bssap[0].vc_BSSMAP:CLIENT);
connect(vc_conn:BSSAP_PROC, g_bssap[0].vc_BSSMAP:PROC);
connect(vc_conn:BSSAP, g_bssap[0].vc_RAN:CLIENT);
connect(vc_conn:BSSAP_PROC, g_bssap[0].vc_RAN:PROC);
/* MNCC part */
connect(vc_conn:MNCC, vc_MNCC:MNCC_CLIENT);
connect(vc_conn:MNCC_PROC, vc_MNCC:MNCC_PROC);
@ -804,7 +804,7 @@ private function f_tc_lu_clear_request(charstring id, BSC_ConnHdlrPars pars) run
mtc.stop;
repeat;
}
[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {}
[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {}
}
setverdict(pass);
}
@ -834,7 +834,7 @@ private function f_tc_lu_disconnect(charstring id, BSC_ConnHdlrPars pars) runs o
f_sleep(1.0);
/* send clear request in the middle of the LU */
BSSAP.send(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_REQ);
BSSAP.send(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_REQ);
setverdict(pass);
f_sleep(1.0);
}
@ -1197,10 +1197,10 @@ private function f_tc_cl3_no_payload(charstring id, BSC_ConnHdlrPars pars) runs
timer T := 5.0;
T.start;
alt {
[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {}
[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {}
/* Expect LU REJECT with Cause == Illegal MS */
[] BSSAP.receive(tr_PDU_DTAP_MT(?)) { repeat; }
[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND) { repeat; }
[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_CONF_IND) { repeat; }
[] as_clear_cmd_compl_disc();
[] T.timeout {
setverdict(fail, "Timeout waiting for ClearCommand or SCCP Release");
@ -1236,9 +1236,9 @@ private function f_tc_cl3_rnd_payload(charstring id, BSC_ConnHdlrPars pars) runs
T.start;
alt {
/* Immediate disconnect */
[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {}
[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {}
[] BSSAP.receive(tr_PDU_DTAP_MT(?)) { repeat; }
[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND) { repeat; }
[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_CONF_IND) { repeat; }
[] as_clear_cmd_compl_disc();
[] T.timeout {
setverdict(fail, "Timeout waiting for ClearCommand or SCCP Release");
@ -1435,7 +1435,7 @@ private function f_mt_call_start(inout CallParameters cpars) runs on BSC_ConnHdl
} else {
tmsi := 'FFFFFFFF'O;
}
f_bssmap_register_imsi(g_pars.imsi, tmsi);
f_ran_register_imsi(g_pars.imsi, tmsi);
/* Allocate call reference and send SETUP via MNCC to MSC */
cpars.mncc_callref := f_rnd_int(2147483648);
@ -2017,7 +2017,7 @@ private function f_tc_lu_and_mt_sms(charstring id, BSC_ConnHdlrPars pars) runs o
} else {
tmsi := 'FFFFFFFF'O;
}
f_bssmap_register_imsi(g_pars.imsi, tmsi);
f_ran_register_imsi(g_pars.imsi, tmsi);
f_vty_sms_send(hex2str(pars.imsi), "2342", "Hello SMS");
@ -2055,7 +2055,7 @@ private function f_tc_lu_and_mt_sms_paging_and_nothing(charstring id, BSC_ConnHd
} else {
tmsi := 'FFFFFFFF'O;
}
f_bssmap_register_imsi(g_pars.imsi, tmsi);
f_ran_register_imsi(g_pars.imsi, tmsi);
f_vty_sms_send(hex2str(pars.imsi), "2342", "Hello SMS");
@ -2311,9 +2311,9 @@ runs on BSC_ConnHdlr {
/* Register an 'expect' for given IMSI (+TMSI) */
if (isvalue(g_pars.tmsi)) {
f_bssmap_register_imsi(g_pars.imsi, g_pars.tmsi);
f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
} else {
f_bssmap_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
f_ran_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
}
var template GSUP_PDU mt_forwardSM_res := tr_GSUP_MT_FORWARD_SM_RES(
@ -2375,9 +2375,9 @@ runs on BSC_ConnHdlr {
/* Register an 'expect' for given IMSI (+TMSI) */
if (isvalue(g_pars.tmsi)) {
f_bssmap_register_imsi(g_pars.imsi, g_pars.tmsi);
f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
} else {
f_bssmap_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
f_ran_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
}
var template GSUP_PDU mt_forwardSM_err := tr_GSUP_MT_FORWARD_SM_ERR(
@ -2441,9 +2441,9 @@ runs on BSC_ConnHdlr {
/* Register an 'expect' for given IMSI (+TMSI) */
if (isvalue(g_pars.tmsi)) {
f_bssmap_register_imsi(g_pars.imsi, g_pars.tmsi);
f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
} else {
f_bssmap_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
f_ran_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
}
/* Submit the 1st MT SMS on GSUP */
@ -2553,9 +2553,9 @@ runs on BSC_ConnHdlr {
/* Register an 'expect' for given IMSI (+TMSI) */
if (isvalue(g_pars.tmsi)) {
f_bssmap_register_imsi(g_pars.imsi, g_pars.tmsi);
f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
} else {
f_bssmap_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
f_ran_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
}
/* Send CM Service Request for MO SMMA */
@ -2656,9 +2656,9 @@ runs on BSC_ConnHdlr {
/* Register an 'expect' for given IMSI (+TMSI) */
if (isvalue(g_pars.tmsi)) {
f_bssmap_register_imsi(g_pars.imsi, g_pars.tmsi);
f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
} else {
f_bssmap_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
f_ran_register_imsi(g_pars.imsi, 'FFFFFFFF'O);
}
var template GSUP_PDU mt_forwardSM_res := tr_GSUP_MT_FORWARD_SM_RES(
@ -2813,7 +2813,7 @@ private function f_tc_smpp_mt_sms(charstring id, BSC_ConnHdlrPars pars) runs on
} else {
tmsi := 'FFFFFFFF'O;
}
f_bssmap_register_imsi(g_pars.imsi, tmsi);
f_ran_register_imsi(g_pars.imsi, tmsi);
var SmsParameters spars := valueof(t_SmsPars);
/* TODO: test with more intelligent user data; test different coding schemes */
@ -2964,7 +2964,7 @@ runs on BSC_ConnHdlr {
/* Perform location update */
f_perform_lu();
f_bssmap_register_imsi(g_pars.imsi, g_pars.tmsi);
f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
/* We need to inspect GSUP activity */
f_create_gsup_expect(hex2str(g_pars.imsi));
@ -3577,7 +3577,7 @@ private function f_sgsap_bssmap_screening() runs on BSC_ConnHdlr {
/* Trigger a paging request and expect the paging on BSSMAP, this is
* to make sure that pagings are sent throught the A-Interface again
* and not throught the SGs interface.*/
f_bssmap_register_imsi(g_pars.imsi, g_pars.tmsi);
f_ran_register_imsi(g_pars.imsi, g_pars.tmsi);
f_vty_transceive(MSCVTY, "subscriber imsi " & hex2str(g_pars.imsi) & " paging");
alt {

View File

@ -89,7 +89,7 @@ DIR=../library
FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn Osmocom_Types.ttcn MNCC_Types.ttcn MNCC_EncDec.cc MNCC_CodecPort.ttcn mncc.h MNCC_Emulation.ttcn Osmocom_VTY_Functions.ttcn Native_Functions.ttcn Native_FunctionDefs.cc "
FILES+="IPA_Types.ttcn IPA_Emulation.ttcnpp IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc GSUP_Types.ttcn GSUP_Emulation.ttcn "
FILES+="Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn L3_Templates.ttcn L3_Common.ttcn "
FILES+="BSSMAP_Emulation.ttcn BSSAP_CodecPort.ttcn BSSMAP_Templates.ttcn BSSAP_Adapter.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_Emulation.ttcn "
FILES+="RAN_Emulation.ttcn BSSAP_CodecPort.ttcn BSSMAP_Templates.ttcn RAN_Adapter.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_Emulation.ttcn "
FILES+="RTP_CodecPort.ttcn RTP_CodecPort_CtrlFunctDef.cc "
FILES+="MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunctDef.cc "
FILES+="SMPP_CodecPort.ttcn SMPP_CodecPort_CtrlFunct.ttcn SMPP_CodecPort_CtrlFunctDef.cc SMPP_Emulation.ttcn SMPP_Templates.ttcn "