96 lines
2.7 KiB

module BSC_ConnectionHandler {
/* BSC Connection Handler of SMLC Tests in TTCN-3
* (C) 2020 sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
* All rights reserved.
* Released under the terms of GNU General Public License, Version 2 or
* (at your option) any later version.
* SPDX-License-Identifier: GPL-2.0-or-later
import from Misc_Helpers all;
import from General_Types all;
import from Osmocom_Types all;
import from SCCPasp_Types all;
import from BSSAP_Types all;
import from BSSAP_CodecPort all;
import from RAN_Emulation all;
import from BSSMAP_Templates all;
import from BSSAP_LE_Emulation all;
import from BSSAP_LE_Types all;
import from BSSMAP_LE_Templates all;
import from TELNETasp_PortType all;
import from Osmocom_VTY_Functions all;
/* this component represents a single subscriber connection at the SMLC. */
type component BSC_ConnHdlr extends BSSAP_LE_ConnHdlr {
/* SCCP Connecction Identifier for the underlying SCCP connection */
var integer g_sccp_conn_id;
var TestHdlrParams g_pars;
var charstring host_bsc := "";
var boolean g_vty_initialized := false;
function f_BscConnHdlr_init_vty() runs on BSC_ConnHdlr {
if (not g_vty_initialized) {
map(self:SMLCVTY, system:SMLCVTY);
f_vty_transceive(SMLCVTY, "enable");
g_vty_initialized := true;
/* initialize all parameters */
function f_BscConnHdlr_init() runs on BSC_ConnHdlr {
/* Callback function from general BSSAP_LE_Emulation whenever a connectionless
* BSSAP_LE message arrives. Can return a PDU_BSSAP_LE that should be sent in return */
private function BSSAP_LE_UnitdataCallback(PDU_BSSAP_LE bssap)
runs on BSSAP_LE_Emulation_CT return template PDU_BSSAP_LE {
var template PDU_BSSAP_LE resp := omit;
/* answer all RESET with a RESET ACK */
if (match(bssap, tr_BSSMAP_LE_Reset)) {
resp := ts_BSSMAP_LE_ResetAck;
return resp;
const BssapLeOps BSC_BssapLeOps := {
create_cb := refers(BSSAP_LE_Emulation.ExpectedCreateCallback),
unitdata_cb := refers(BSSAP_LE_UnitdataCallback),
decode_dtap := false,
role_ms := false,
sccp_addr_local := omit,
sccp_addr_peer := omit
type record TestHdlrParams {
hexstring imsi,
integer bssap_le_idx,
SCCP_PAR_Address sccp_addr_bsc optional,
SCCP_PAR_Address sccp_addr_smlc optional
/* Note: Do not use valueof() to get a value of this template, use
* f_gen_test_hdlr_pars() instead in order to get a configuration that is
* matched to the current test situation (aoip vs. sccplite) */
template (value) TestHdlrParams t_def_TestHdlrPars := {
imsi := '001019876543210'H,
bssap_le_idx := 0,
sccp_addr_bsc := omit,
sccp_addr_smlc := omit