pespin has uploaded this change for review.

View Change

Split SCCP_Adapter out of RAN_Adapter

RAN_Adapter has further features and goes up in the stack, while
sometimes getting an SCCP SAP is enough, eg. when doing stuf with
SIGTRAN on the Core Network (eg. TCAP).

TODO: Adapt cfg files of msc

Change-Id: I0558d74d53ceb1b33c4f3d583f1b4489f6d7ee60
---
M bsc/BSC_Tests.default
M bsc/BSC_Tests.ttcn
M bsc/BSC_Tests_ASCI.ttcn
M bsc/BSC_Tests_SCCPlite.cfg
M bsc/gen_links.sh
M hnbgw/HNBGW_Tests.default
M hnbgw/HNBGW_Tests.ttcn
M hnbgw/gen_links.sh
M library/RAN_Adapter.ttcnpp
A library/SCCP_Adapter.ttcnpp
M msc/MSC_Tests.default
M msc/MSC_Tests.ttcn
M msc/gen_links.sh
M sgsn/SGSN_Tests.default
M sgsn/SGSN_Tests.ttcn
M sgsn/SGSN_Tests_Iu.ttcn
M sgsn/gen_links.sh
17 files changed, 548 insertions(+), 379 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/33/41133/1
diff --git a/bsc/BSC_Tests.default b/bsc/BSC_Tests.default
index 2c65b18..fe5ec86 100644
--- a/bsc/BSC_Tests.default
+++ b/bsc/BSC_Tests.default
@@ -41,39 +41,57 @@
BSC_Tests.mp_bssap_cfg := {
{
transport := BSSAP_TRANSPORT_AoIP,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23905, "127.0.0.1", 2905, "127.0.0.1" },
- own_pc := 185, # 0.23.1 first MSC emulation
- own_ssn := 254,
- peer_pc := 187, # 0.23.3 osmo-bsc
- peer_ssn := 254,
- sio := '83'O,
- rctx := 1
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23905, "127.0.0.1", 2905, "127.0.0.1" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 185, # 0.23.1 first MSC emulation
+ own_ssn := 254,
+ peer_pc := 187, # 0.23.3 osmo-bsc
+ peer_ssn := 254,
+ sio := '83'O,
+ rctx := 1
+ }
},
{
transport := BSSAP_TRANSPORT_AoIP,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23906, "127.0.0.1", 2905, "127.0.0.1" },
- own_pc := 2, # 0.0.2 second MSC emulation
- own_ssn := 254,
- peer_pc := 187, # 0.23.3 osmo-bsc
- peer_ssn := 254,
- sio := '83'O,
- rctx := 2
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23906, "127.0.0.1", 2905, "127.0.0.1" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 2, # 0.0.2 second MSC emulation
+ own_ssn := 254,
+ peer_pc := 187,# 0.23.3 osmo-bsc
+ peer_ssn := 254,
+ sio := '83'O,
+ rctx := 2
+ }
},
{
transport := BSSAP_TRANSPORT_AoIP,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23907, "127.0.0.1", 2905, "127.0.0.1" },
- own_pc := 3, # 0.0.3 third MSC emulation
- own_ssn := 254,
- peer_pc := 187, # 0.23.3 osmo-bsc
- peer_ssn := 254,
- sio := '83'O,
- rctx := 3
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23907, "127.0.0.1", 2905, "127.0.0.1" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 3, # 0.0.3 third MSC emulation
+ own_ssn := 254,
+ peer_pc := 187, # 0.23.3 osmo-bsc
+ peer_ssn := 254,
+ sio := '83'O,
+ rctx := 3
+ }
}
};

diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index e6260b3..156c8ef 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -32,6 +32,7 @@
import from IPL4asp_Types all;

import from BSSAP_Types all;
+import from SCCP_Adapter all;
import from RAN_Adapter all;
import from BSSAP_LE_Adapter all;
import from BSSAP_LE_CodecPort all;
@@ -893,11 +894,11 @@
var BSSAP_N_UNITDATA_ind ud_ind;
var boolean reset_received := false;
timer T := 5.0;
- BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[bssap_idx].sccp_addr_peer, g_bssap[bssap_idx].sccp_addr_own,
+ BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[bssap_idx].sccpa.sccp_addr_peer, g_bssap[bssap_idx].sccpa.sccp_addr_own,
ts_BSSMAP_Reset(0, g_osmux_enabled_cn)));
T.start;
alt {
- [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap[bssap_idx].sccp_addr_own, g_bssap[bssap_idx].sccp_addr_peer,
+ [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap[bssap_idx].sccpa.sccp_addr_own, g_bssap[bssap_idx].sccpa.sccp_addr_peer,
tr_BSSMAP_ResetAck(g_osmux_enabled_cn))) {
log("BSSMAP: Received RESET-ACK in response to RESET, we're ready to go!");
}
@@ -1209,18 +1210,18 @@
var RanOps ranops := MSC_RanOps;
ranops.use_osmux := g_osmux_enabled_cn;
f_ran_adapter_init(g_bssap[bssap_idx], mp_bssap_cfg[bssap_idx], "VirtMSC", ranops);
- if (isbound(g_bssap[bssap_idx].vc_IPA)) {
- connect(self:SCCPLITE_IPA_CFG_PORT[bssap_idx], g_bssap[bssap_idx].vc_IPA:CFG_PORT);
+ if (isbound(g_bssap[bssap_idx].sccpa.vc_IPA)) {
+ connect(self:SCCPLITE_IPA_CFG_PORT[bssap_idx], g_bssap[bssap_idx].sccpa.vc_IPA:CFG_PORT);
}
connect(self:SCCPLITE_IPA_CTRL, g_bssap[bssap_idx].vc_RAN:CTRL_CLIENT);
f_ran_adapter_start(g_bssap[bssap_idx]);
} else {
- f_ran_adapter_init(g_bssap[bssap_idx], mp_bssap_cfg[bssap_idx], "VirtMSC", omit);
- if (isbound(g_bssap[bssap_idx].vc_IPA)) {
- connect(self:SCCPLITE_IPA_CFG_PORT[bssap_idx], g_bssap[bssap_idx].vc_IPA:CFG_PORT);
+ f_sccp_adapter_init(g_bssap[bssap_idx].sccpa, mp_bssap_cfg[bssap_idx].sccp, "VirtMSC");
+ if (isbound(g_bssap[bssap_idx].sccpa.vc_IPA)) {
+ connect(self:SCCPLITE_IPA_CFG_PORT[bssap_idx], g_bssap[bssap_idx].sccpa.vc_IPA:CFG_PORT);
}
- connect(self:BSSAP, g_bssap[bssap_idx].vc_SCCP:SCCP_SP_PORT);
- f_ran_adapter_start(g_bssap[bssap_idx]);
+ connect(self:BSSAP, g_bssap[bssap_idx].sccpa.vc_SCCP:SCCP_SP_PORT);
+ f_sccp_adapter_start(g_bssap[bssap_idx].sccpa);
f_legacy_bssap_reset();
}
}
@@ -1233,13 +1234,17 @@
os_error_text := omit
};

- if (isbound(g_bssap[bssap_idx].vc_IPA)) {
+ if (isbound(g_bssap[bssap_idx].sccpa.vc_IPA)) {
/* Alive components don't finish sockets (TCP FIN) when they are
* stopped. Hence, we need to manually call close() on them to make sure
* the IUT knows about it. */
f_ipa_cfg_disconnect(SCCPLITE_IPA_CFG_PORT[bssap_idx], res);
} else {
- f_ran_adapter_cleanup(g_bssap[bssap_idx]);
+ if (g_handler_mode) {
+ f_ran_adapter_cleanup(g_bssap[bssap_idx]);
+ } else {
+ f_sccp_adapter_cleanup(g_bssap[bssap_idx].sccpa);
+ }
}
}

@@ -1696,7 +1701,7 @@
testcase TC_outbound_connect(integer bssap_idx := 0) runs on test_CT {
f_init(1);

- BSSAP.send(ts_BSSAP_CONNECT_req(g_bssap[bssap_idx].sccp_addr_peer, g_bssap[bssap_idx].sccp_addr_own,
+ BSSAP.send(ts_BSSAP_CONNECT_req(g_bssap[bssap_idx].sccpa.sccp_addr_peer, g_bssap[bssap_idx].sccpa.sccp_addr_own,
2342, ts_BSSMAP_AssignmentReq));
BSSAP.receive(tr_BSSAP_DISC_ind(2342, ?, ?));
f_shutdown_helper();
@@ -2416,9 +2421,9 @@
IPA_RSL[0][0].clear;

/* perform BSSAP RESET, expect RESET ACK and DISC.ind on connection */
- BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccp_addr_peer, g_bssap[0].sccp_addr_own, ts_BSSMAP_Reset(0, g_osmux_enabled_cn)));
+ BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccpa.sccp_addr_peer, g_bssap[0].sccpa.sccp_addr_own, ts_BSSMAP_Reset(0, g_osmux_enabled_cn)));
interleave {
- [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap[0].sccp_addr_own, g_bssap[0].sccp_addr_peer, tr_BSSMAP_ResetAck(g_osmux_enabled_cn))) { }
+ [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap[0].sccpa.sccp_addr_own, g_bssap[0].sccpa.sccp_addr_peer, tr_BSSMAP_ResetAck(g_osmux_enabled_cn))) { }
[] BSSAP.receive(tr_BSSAP_DISC_ind(dt.sccp_conn_id, ?, ?)) { }
}

@@ -3510,7 +3515,7 @@
bssmap_chneed := omit;
}

- BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccp_addr_peer, g_bssap[0].sccp_addr_own,
+ BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccpa.sccp_addr_peer, g_bssap[0].sccpa.sccp_addr_own,
ts_BSSMAP_Paging(imsi, cid_list, tmsi, bssmap_chneed)));

if (not istemplatekind(tmsi, "omit")) {
@@ -3828,9 +3833,9 @@
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_bssap[0].sccp_addr_peer, g_bssap[0].sccp_addr_own, ts_BSSMAP_Reset(0, g_osmux_enabled_cn)));
+ BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccpa.sccp_addr_peer, g_bssap[0].sccpa.sccp_addr_own, ts_BSSMAP_Reset(0, g_osmux_enabled_cn)));
alt {
- [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap[0].sccp_addr_own, g_bssap[0].sccp_addr_peer, tr_BSSMAP_ResetAck(g_osmux_enabled_cn))) { }
+ [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_bssap[0].sccpa.sccp_addr_own, g_bssap[0].sccpa.sccp_addr_peer, tr_BSSMAP_ResetAck(g_osmux_enabled_cn))) { }
[] BSSAP.receive { repeat; }
}

@@ -3937,7 +3942,7 @@

for (i := 0; i < num_subscribers; i := i + 1) {
/* Page on LAC-CI of BTS0: */
- BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccp_addr_peer, g_bssap[0].sccp_addr_own,
+ BSSAP.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccpa.sccp_addr_peer, g_bssap[0].sccpa.sccp_addr_own,
ts_BSSMAP_Paging(imsis[i], valueof(ts_BSSMAP_CIL_LAC_CI({ts_BSSMAP_CI_LAC_CI(1, 0)})),
omit, omit)));
}
@@ -6679,8 +6684,8 @@
f_vty_encryption_a5(vty_a5_cfg);
f_ctrs_bsc_and_bts_handover_init();

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

vc_conn := f_start_handler(refers(f_tc_ho_into_this_bsc), pars);
vc_conn.done;
@@ -6853,8 +6858,8 @@
f_ctrs_bsc_and_bts_handover_init();

pars.last_used_eutran_plmn := '323454'O;
- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

vc_conn := f_start_handler(refers(f_tc_srvcc_eutran_to_geran_ho_out), pars);
vc_conn.done;
@@ -6960,8 +6965,8 @@

f_ctrs_bsc_and_bts_handover_init();

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

vc_conn := f_start_handler(refers(f_tc_ho_in_fail_msc_clears), pars);
vc_conn.done;
@@ -7057,8 +7062,8 @@

f_ctrs_bsc_and_bts_handover_init();

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

vc_conn := f_start_handler(refers(f_tc_ho_in_fail_msc_clears_after_ho_detect), pars);
vc_conn.done;
@@ -7149,8 +7154,8 @@

f_ctrs_bsc_and_bts_handover_init();

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

vc_conn := f_start_handler(refers(f_tc_ho_in_fail_no_detect), pars);
vc_conn.done;
@@ -7233,8 +7238,8 @@

f_ctrs_bsc_and_bts_handover_init();

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

vc_conn := f_start_handler(refers(f_tc_ho_in_fail_no_detect2), pars);
vc_conn.done;
@@ -9193,8 +9198,8 @@
var MSC_ConnHdlr vc_conn1;
var TestHdlrParams pars1 := f_gen_test_hdlr_pars(bssap_idx := 0);
pars1.mscpool.rsl_idx := 0;
- pars1.sccp_addr_bsc := g_bssap[pars1.mscpool.bssap_idx].sccp_addr_peer;
- pars1.sccp_addr_msc := g_bssap[pars1.mscpool.bssap_idx].sccp_addr_own;
+ pars1.sccp_addr_bsc := g_bssap[pars1.mscpool.bssap_idx].sccpa.sccp_addr_peer;
+ pars1.sccp_addr_msc := g_bssap[pars1.mscpool.bssap_idx].sccpa.sccp_addr_own;
vc_conn1 := f_start_handler(refers(f_tc_mscpool_paging_imsi), pars1);
vc_conn1.done;
f_ctrs_msc_expect(0, "mscpool:subscr:paged");
@@ -9245,8 +9250,8 @@
var MSC_ConnHdlr vc_conn1;
var TestHdlrParams pars1 := f_gen_test_hdlr_pars(bssap_idx := 0);
pars1.mscpool.rsl_idx := 0;
- pars1.sccp_addr_bsc := g_bssap[pars1.mscpool.bssap_idx].sccp_addr_peer;
- pars1.sccp_addr_msc := g_bssap[pars1.mscpool.bssap_idx].sccp_addr_own;
+ pars1.sccp_addr_bsc := g_bssap[pars1.mscpool.bssap_idx].sccpa.sccp_addr_peer;
+ pars1.sccp_addr_msc := g_bssap[pars1.mscpool.bssap_idx].sccpa.sccp_addr_own;
vc_conn1 := f_start_handler(refers(f_tc_mscpool_paging_tmsi), pars1);
vc_conn1.done;
f_ctrs_msc_expect(0, "mscpool:subscr:paged");
@@ -10555,8 +10560,8 @@
f_init(1, true);
f_sleep(1.0);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

vc_conn := f_start_handler(refers(f_tc_lcs_loc_req_for_idle_ms), pars);
vc_conn.done;
@@ -10595,8 +10600,8 @@
f_init(1, true);
f_sleep(1.0);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

vc_conn := f_start_handler(refers(f_tc_lcs_loc_req_no_subscriber), pars);
vc_conn.done;
@@ -10730,8 +10735,8 @@
f_init(1, true);
f_sleep(1.0);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

vc_conn := f_start_handler(refers(f_tc_lcs_loc_req_for_idle_ms_no_pag_resp), pars);
vc_conn.done;
@@ -10790,8 +10795,8 @@
f_init(1, true);
f_sleep(1.0);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

vc_conn := f_start_handler(refers(f_tc_cm_service_during_lcs_loc_req), pars);
vc_conn.done;
diff --git a/bsc/BSC_Tests_ASCI.ttcn b/bsc/BSC_Tests_ASCI.ttcn
index eb4a9dc..f9c546c 100644
--- a/bsc/BSC_Tests_ASCI.ttcn
+++ b/bsc/BSC_Tests_ASCI.ttcn
@@ -510,8 +510,8 @@

f_init(1, true);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

pars.asci_test.vgcs_setup_ok := true;

@@ -528,8 +528,8 @@

f_init(1, true);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

pars.asci_test.vgcs_assign_ok := true;

@@ -550,8 +550,8 @@

f_init(1, true);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

pars.asci_test.vgcs_assign_fail := true;

@@ -572,8 +572,8 @@

f_init(1, true);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

pars.asci_test.vgcs_talker_req := true;

@@ -594,8 +594,8 @@

f_init(1, true);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

/* MSC sends acknowledge before link on BTS fail. */
pars.asci_test.vgcs_talker_fail := true;
@@ -618,8 +618,8 @@

f_init(1, true);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

/* MSC sends acknowledge after link on BTS fail. */
pars.asci_test.vgcs_talker_fail := true;
@@ -642,8 +642,8 @@

f_init(1, true);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

/* MSC sends acknowledge before BTS establishes the uplink. */
pars.asci_test.vgcs_talker_est := true;
@@ -666,8 +666,8 @@

f_init(1, true);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

/* MSC sends acknowledge after BTS established the uplink. */
pars.asci_test.vgcs_talker_est := true;
@@ -690,8 +690,8 @@

f_init(1, true);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

pars.asci_test.vgcs_talker_rel := true;
pars.asci_test.delay_bts := true;
@@ -713,8 +713,8 @@

f_init(1, true);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

pars.asci_test.vgcs_talker_rel := true;
pars.asci_test.delay_msc := true;
@@ -736,8 +736,8 @@

f_init(1, true);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

pars.asci_test.vgcs_uplink_reject := true;

@@ -758,8 +758,8 @@

f_init(1, true);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

pars.asci_test.vgcs_uplink_seized := true;

@@ -780,8 +780,8 @@

f_init(1, true);

- pars.sccp_addr_msc := g_bssap[0].sccp_addr_own;
- pars.sccp_addr_bsc := g_bssap[0].sccp_addr_peer;
+ pars.sccp_addr_msc := g_bssap[0].sccpa.sccp_addr_own;
+ pars.sccp_addr_bsc := g_bssap[0].sccpa.sccp_addr_peer;

pars.asci_test.vgcs_uplink_release := true;

diff --git a/bsc/BSC_Tests_SCCPlite.cfg b/bsc/BSC_Tests_SCCPlite.cfg
index c5f46c9..e4f4068 100644
--- a/bsc/BSC_Tests_SCCPlite.cfg
+++ b/bsc/BSC_Tests_SCCPlite.cfg
@@ -16,15 +16,22 @@
BSC_Tests.mp_bssap_cfg := {
{
transport := BSSAP_TRANSPORT_SCCPlite,
- transport_is_server := true,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 5000, "127.0.0.1", 4000, "" },
- own_pc := 185, # 0.23.1 first MSC emulation
- own_ssn := 254,
- peer_pc := 187, # 0.23.3 osmo-bsc
- peer_ssn := 254,
- sio := '83'O,
- rctx := 0
+ sccp := {
+ transport := SCCP_TRANSPORT_SCCPlite,
+ tpars := {
+ sccplite := {
+ tcp_addr := { 5000, "127.0.0.1", 4000, "" },
+ tcp_is_server := true
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 185, # 0.23.1 first MSC emulation
+ own_ssn := 254,
+ peer_pc := 187, # 0.23.3 osmo-bsc
+ peer_ssn := 254,
+ sio := '83'O,
+ rctx := 0
+ }
}
};
BSC_Tests.mp_enable_lcs_tests := false;
diff --git a/bsc/gen_links.sh b/bsc/gen_links.sh
index 7e31117..33c697c 100755
--- a/bsc/gen_links.sh
+++ b/bsc/gen_links.sh
@@ -67,7 +67,7 @@
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 RAN_Emulation.ttcnpp RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn RSL_Emulation.ttcn MGCP_Emulation.ttcn SDP_Templates.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc BSSAP_CodecPort.ttcn RAN_Adapter.ttcnpp 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 GSM_SystemInformation.ttcn GSM_RestOctets.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.ttcnpp RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn GSM_RR_Types.ttcn RSL_Types.ttcn RSL_Emulation.ttcn MGCP_Emulation.ttcn SDP_Templates.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc BSSAP_CodecPort.ttcn SCCP_Adapter.ttcnpp RAN_Adapter.ttcnpp 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 GSM_SystemInformation.ttcn GSM_RestOctets.ttcn "
FILES+="CBSP_Types.ttcn CBSP_Templates.ttcn "
FILES+="CBSP_CodecPort.ttcn CBSP_CodecPort_CtrlFunct.ttcn CBSP_CodecPort_CtrlFunctdef.cc CBSP_Adapter.ttcn "
FILES+="StatsD_Types.ttcn StatsD_CodecPort.ttcn StatsD_CodecPort_CtrlFunct.ttcn StatsD_CodecPort_CtrlFunctdef.cc StatsD_Checker.ttcnpp "
diff --git a/hnbgw/HNBGW_Tests.default b/hnbgw/HNBGW_Tests.default
index f44ccc5..5cafb12 100644
--- a/hnbgw/HNBGW_Tests.default
+++ b/hnbgw/HNBGW_Tests.default
@@ -37,100 +37,148 @@
HNBGW_Tests.mp_cn_cfg := {
{
transport := RANAP_TRANSPORT_IuCS,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23905, "127.0.0.1", 2905, "127.0.0.1" },
- own_pc := 185, # 0.23.1 first MSC emulation
- own_ssn := 142,
- peer_pc := 189, # 0.23.5 osmo-hnbgw
- peer_ssn := 142,
- sio := '83'O,
- rctx := 1
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23905, "127.0.0.1", 2905, "127.0.0.1" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 185, # 0.23.1 first MSC emulation
+ own_ssn := 142,
+ peer_pc := 189, # 0.23.5 osmo-hnbgw
+ peer_ssn := 142,
+ sio := '83'O,
+ rctx := 1
+ }
},
{
transport := RANAP_TRANSPORT_IuCS,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23907, "127.0.0.1", 2905, "127.0.0.1" },
- own_pc := 2, # 0.0.2 second MSC emulation
- own_ssn := 142,
- peer_pc := 189, # 0.23.5 osmo-hnbgw
- peer_ssn := 142,
- sio := '83'O,
- rctx := 3
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23907, "127.0.0.1", 2905, "127.0.0.1" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 2, # 0.0.2 second MSC emulation
+ own_ssn := 142,
+ peer_pc := 189, # 0.23.5 osmo-hnbgw
+ peer_ssn := 142,
+ sio := '83'O,
+ rctx := 3
+ }
},
{
transport := RANAP_TRANSPORT_IuCS,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23909, "127.0.0.1", 2905, "127.0.0.1" },
- own_pc := 3, # 0.0.3 third MSC emulation
- own_ssn := 142,
- peer_pc := 189, # 0.23.5 osmo-hnbgw
- peer_ssn := 142,
- sio := '83'O,
- rctx := 5
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23909, "127.0.0.1", 2905, "127.0.0.1" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 3, # 0.0.3 third MSC emulation
+ own_ssn := 142,
+ peer_pc := 189, # 0.23.5 osmo-hnbgw
+ peer_ssn := 142,
+ sio := '83'O,
+ rctx := 5
+ }
},
{
transport := RANAP_TRANSPORT_IuCS,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23911, "127.0.0.1", 2905, "127.0.0.1" },
- own_pc := 4, # 0.0.4 fourth MSC emulation
- own_ssn := 142,
- peer_pc := 189, # 0.23.5 osmo-hnbgw
- peer_ssn := 142,
- sio := '83'O,
- rctx := 7
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23911, "127.0.0.1", 2905, "127.0.0.1" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 4, # 0.0.4 fourth MSC emulation
+ own_ssn := 142,
+ peer_pc := 189, # 0.23.5 osmo-hnbgw
+ peer_ssn := 142,
+ sio := '83'O,
+ rctx := 7
+ }
},
# SGSNs (NUM_SGSN entries)
{
transport := RANAP_TRANSPORT_IuCS,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23906, "127.0.0.1", 2905, "127.0.0.1" },
- own_pc := 188, # 0.23.4 first SGSN emulation
- own_ssn := 142,
- peer_pc := 189, # 2237, 1.23.5 osmo-hnbgw
- peer_ssn := 142,
- sio := '83'O,
- rctx := 2
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23906, "127.0.0.1", 2905, "127.0.0.1" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 188, # 0.23.4 first SGSN emulation
+ own_ssn := 142,
+ peer_pc := 189, # 2237, 1.23.5 osmo-hnbgw
+ peer_ssn := 142,
+ sio := '83'O,
+ rctx := 2
+ }
},
{
transport := RANAP_TRANSPORT_IuCS,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23908, "127.0.0.1", 2905, "127.0.0.1" },
- own_pc := 10, # 0.1.2 second SGSN emulation
- own_ssn := 142,
- peer_pc := 189, # 2237, 1.23.5 osmo-hnbgw
- peer_ssn := 142,
- sio := '83'O,
- rctx := 4
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23908, "127.0.0.1", 2905, "127.0.0.1" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 10, # 0.1.2 second SGSN emulation
+ own_ssn := 142,
+ peer_pc := 189, # 2237, 1.23.5 osmo-hnbgw
+ peer_ssn := 142,
+ sio := '83'O,
+ rctx := 4
+ }
},
{
transport := RANAP_TRANSPORT_IuCS,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23910, "127.0.0.1", 2905, "127.0.0.1" },
- own_pc := 11, # 0.1.3 third SGSN emulation
- own_ssn := 142,
- peer_pc := 189, # 2237, 1.23.5 osmo-hnbgw
- peer_ssn := 142,
- sio := '83'O,
- rctx := 6
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23910, "127.0.0.1", 2905, "127.0.0.1" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 11, # 0.1.3 third SGSN emulation
+ own_ssn := 142,
+ peer_pc := 189, # 2237, 1.23.5 osmo-hnbgw
+ peer_ssn := 142,
+ sio := '83'O,
+ rctx := 6
+ }
},
{
transport := RANAP_TRANSPORT_IuCS,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23912, "127.0.0.1", 2905, "127.0.0.1" },
- own_pc := 12, # 0.1.4 fourth SGSN emulation
- own_ssn := 142,
- peer_pc := 189, # 2237, 1.23.5 osmo-hnbgw
- peer_ssn := 142,
- sio := '83'O,
- rctx := 8
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23912, "127.0.0.1", 2905, "127.0.0.1" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 12, # 0.1.4 fourth SGSN emulation
+ own_ssn := 142,
+ peer_pc := 189, # 2237, 1.23.5 osmo-hnbgw
+ peer_ssn := 142,
+ sio := '83'O,
+ rctx := 8
+ }
}
};

diff --git a/hnbgw/HNBGW_Tests.ttcn b/hnbgw/HNBGW_Tests.ttcn
index 2ef7b4d..f22713b 100644
--- a/hnbgw/HNBGW_Tests.ttcn
+++ b/hnbgw/HNBGW_Tests.ttcn
@@ -539,8 +539,8 @@
pfcp_pars := pfcp_pars,
rab_rel_cause := rab_rel_cause,
hnbgw_timer_x31 := mp_hnbgw_timer_x31);
- pars.sccp_addr_hnbgw := g_cn[valueof(pars.cn_idx)].sccp_addr_peer;
- pars.sccp_addr_msc := g_cn[valueof(pars.cn_idx)].sccp_addr_own;
+ pars.sccp_addr_hnbgw := g_cn[valueof(pars.cn_idx)].sccpa.sccp_addr_peer;
+ pars.sccp_addr_msc := g_cn[valueof(pars.cn_idx)].sccpa.sccp_addr_own;
return valueof(pars);
}

diff --git a/hnbgw/gen_links.sh b/hnbgw/gen_links.sh
index a6a2f54..c8ed46d 100755
--- a/hnbgw/gen_links.sh
+++ b/hnbgw/gen_links.sh
@@ -99,7 +99,7 @@
DIR=../library
FILES="Iuh_Types.ttcn Iuh_CodecPort.ttcn Iuh_CodecPort_CtrlFunctDef.cc Iuh_CodecPort_CtrlFunct.ttcn Iuh_Emulation.ttcn DNS_Helpers.ttcn "
FILES+="SDP_Templates.ttcn MGCP_Emulation.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_CodecPort_CtrlFunctDef.cc "
-FILES+="RAN_Adapter.ttcnpp RAN_Emulation.ttcnpp BSSAP_CodecPort.ttcn SCCP_Templates.ttcn "
+FILES+="SCCP_Adapter.ttcnpp RAN_Adapter.ttcnpp RAN_Emulation.ttcnpp BSSAP_CodecPort.ttcn SCCP_Templates.ttcn "
FILES+="PFCP_CodecPort.ttcn PFCP_CodecPort_CtrlFunct.ttcn PFCP_CodecPort_CtrlFunctDef.cc PFCP_Emulation.ttcn PFCP_Templates.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 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 "
FILES+="StatsD_Types.ttcn StatsD_CodecPort.ttcn StatsD_CodecPort_CtrlFunct.ttcn StatsD_CodecPort_CtrlFunctdef.cc StatsD_Checker.ttcnpp "
diff --git a/library/RAN_Adapter.ttcnpp b/library/RAN_Adapter.ttcnpp
index d1cd85c..3334749 100644
--- a/library/RAN_Adapter.ttcnpp
+++ b/library/RAN_Adapter.ttcnpp
@@ -22,15 +22,12 @@
import from MTP3asp_Types all;
import from MTP3asp_PortType all;

-import from IPA_Emulation all;
-
import from SCCP_Types all;
import from SCCPasp_Types all;
import from SCCP_Emulation all;
import from SCCP_Templates all;

-import from SCTPasp_Types all;
-import from SCTPasp_PortType all;
+import from SCCP_Adapter all;

#ifdef RAN_EMULATION_BSSAP
import from BSSMAP_Templates all;
@@ -38,178 +35,79 @@
import from RAN_Emulation all;

type record RAN_Adapter {
- /* component references */
- M3UA_CT vc_M3UA, /* only in 3GPP AoIP */
- IPA_Emulation_CT vc_IPA, /* only in SCCPlite */
- IPA_EventWaiter_CT vc_WAIT, /* only in SCCPlite */
- SCCP_CT vc_SCCP,
-
- MSC_SCCP_MTP3_parameters sccp_pars,
- SCCP_PAR_Address sccp_addr_own,
- SCCP_PAR_Address sccp_addr_peer,
+ SCCP_Adapter sccpa,
RAN_Transport transport,
- boolean transport_is_server,
-
- /* handler mode */
RAN_Emulation_CT vc_RAN
}

type record RAN_Configuration {
RAN_Transport transport,
- boolean transport_is_server,
- charstring sccp_service_type,
- SCTP_Association_Address sctp_addr,
- integer own_pc,
- integer own_ssn,
- integer peer_pc,
- integer peer_ssn,
- octetstring sio,
- integer rctx
+ SCCP_Adapter_Config sccp
};
type record of RAN_Configuration RAN_Configurations;

-private function init_pars(inout RAN_Adapter ba, in RAN_Configuration cfg) {
- ba.sccp_pars := {
- sio := {
- ni := substr(oct2bit(cfg.sio),0,2),
- prio := substr(oct2bit(cfg.sio),2,2),
- si := substr(oct2bit(cfg.sio),4,4)
- },
- opc := cfg.own_pc,
- dpc := cfg.peer_pc,
- sls := 0,
- sccp_serviceType := cfg.sccp_service_type,
- ssn := cfg.own_ssn
- };
- ba.sccp_addr_own := valueof(ts_SccpAddr_PC_SSN(cfg.own_pc, cfg.own_ssn, cfg.sio, cfg.sccp_service_type));
- ba.sccp_addr_peer := valueof(ts_SccpAddr_PC_SSN(cfg.peer_pc, cfg.peer_ssn, cfg.sio, cfg.sccp_service_type));
- ba.transport := cfg.transport;
- ba.transport_is_server := cfg.transport_is_server;
-}
-
-
function f_ran_adapter_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;
+ RanOps ops) {
+ f_sccp_adapter_init(ba.sccpa, cfg.sccp, id);
+ ba.transport := cfg.transport;
+ ops.sccp_addr_local := ba.sccpa.sccp_addr_own;
+ ops.sccp_addr_peer := ba.sccpa.sccp_addr_peer;

/* create components */
- ba.vc_SCCP := SCCP_CT.create(id & "-SCCP") alive;
- if (isvalue(ops)) {
- ba.vc_RAN := RAN_Emulation_CT.create(id & "-RAN") alive;
- } else {
- ba.vc_RAN := null;
- }
- select (cfg.transport) {
- case (BSSAP_TRANSPORT_AoIP, RANAP_TRANSPORT_IuCS) {
- var template (omit) integer rctx;
- if (not ispresent(cfg.rctx)) {
- rctx := omit;
- } else {
- rctx := cfg.rctx;
- }
- ba.vc_M3UA := M3UA_CT.create(id & "-M3UA") alive;
- map(ba.vc_M3UA:SCTP_PORT, system:sctp);
- /* connect MTP3 service provider (M3UA) to lower side of SCCP */
- connect(ba.vc_M3UA:MTP3_SP_PORT, ba.vc_SCCP:MTP3_SCCP_PORT);
- ba.vc_M3UA.start(f_M3UA_Emulation(cfg.sctp_addr, rctx));
- }
-#ifdef IPA_EMULATION_SCCP
- case (SCCP_TRANSPORT_SCCPlite) {
- ba.vc_IPA := IPA_Emulation_CT.create(id & "-IPA") alive;
- map(ba.vc_IPA:IPA_PORT, system:IPA_CODEC_PT);
- /* connect MTP3 service provider (IPA) to lower side of SCCP */
- connect(ba.vc_IPA:MTP3_SP_PORT, ba.vc_SCCP:MTP3_SCCP_PORT);
- /* connect waiter to general IPA port (for ASP_IPA_Event) */
- ba.vc_WAIT := IPA_EventWaiter_CT.create(id & "-IPA-WAIT") alive;
- connect(ba.vc_IPA:IPA_SP_PORT, ba.vc_WAIT:IPA_SP_PORT);
- ba.vc_WAIT.start(IPA_Emulation.waiter_main());
- if (cfg.transport_is_server) {
- ba.vc_IPA.start(IPA_Emulation.main_server(cfg.sctp_addr.local_ip_addr,
- cfg.sctp_addr.local_sctp_port,
- true, IPA_INIT_SEND_IPA_ID_ACK));
- } else {
- ba.vc_IPA.start(IPA_Emulation.main_client(cfg.sctp_addr.remote_ip_addr,
- cfg.sctp_addr.remote_sctp_port,
- cfg.sctp_addr.local_ip_addr,
- cfg.sctp_addr.local_sctp_port,
- ba.ipa_ccm_pars));
- }
- /* wait until we received an IPA CCM ID_ACK */
- ba.vc_WAIT.done;
- disconnect(ba.vc_IPA:IPA_SP_PORT, ba.vc_WAIT:IPA_SP_PORT);
- }
-#endif /* IPA_EMULATION_SCCP */
- case else {
- setverdict(fail, "Unsuppored RAN_Transport");
- mtc.stop;
- }
- }
+ ba.vc_RAN := RAN_Emulation_CT.create(id & "-RAN") alive;

- if (isvalue(ops)) {
- timer T := 5.0;
- T.start;
- //T.timeout;
- ops.transport := cfg.transport;
- /* connect BSSNAP component to upper side of SCCP */
- if (cfg.transport == RANAP_TRANSPORT_IuCS) {
+ timer T := 5.0;
+ T.start;
+ //T.timeout;
+ ops.transport := cfg.transport;
+ /* connect BSSNAP component to upper side of SCCP */
+ if (cfg.transport == RANAP_TRANSPORT_IuCS) {
#ifdef RAN_EMULATION_RANAP
- log("Connecting RANAP RAN_Emulation to SCCP_SP_PORT");
- ops.protocol := RAN_PROTOCOL_RANAP
- connect(ba.vc_RAN:RANAP, ba.vc_SCCP:SCCP_SP_PORT);
+ log("Connecting RANAP RAN_Emulation to SCCP_SP_PORT");
+ ops.protocol := RAN_PROTOCOL_RANAP
+ connect(ba.vc_RAN:RANAP, ba.sccpa.vc_SCCP:SCCP_SP_PORT);
#endif
- } else {
+ } else {
#ifdef RAN_EMULATION_BSSAP
- log("Connecting BSSAP RAN_Emulation to SCCP_SP_PORT");
- connect(ba.vc_RAN:BSSAP, ba.vc_SCCP:SCCP_SP_PORT);
+ log("Connecting BSSAP RAN_Emulation to SCCP_SP_PORT");
+ connect(ba.vc_RAN:BSSAP, ba.sccpa.vc_SCCP:SCCP_SP_PORT);
#endif
- }
- if (cfg.transport == BSSAP_TRANSPORT_SCCPlite) {
+ }
+ if (cfg.transport == BSSAP_TRANSPORT_SCCPlite) {
#ifdef IPA_EMULATION_MGCP
- /* connect IPA MGCP port with BSSMAP MGCP port */
- log("Connecting MGCP RAN Emulation to IPA MGCP PORT");
- connect(ba.vc_IPA:IPA_MGCP_PORT, ba.vc_RAN:MGCP);
+ /* connect IPA MGCP port with BSSMAP MGCP port */
+ log("Connecting MGCP RAN Emulation to IPA MGCP PORT");
+ connect(ba.sccpa.vc_IPA:IPA_MGCP_PORT, ba.vc_RAN:MGCP);
#endif
#ifdef IPA_EMULATION_CTRL
#ifdef RAN_EMULATION_CTRL
- /* connect IPA CTRL port with BSSMAP CTRL port */
- log("Connecting CTRL RAN Emulation to IPA CTRL PORT");
- connect(ba.vc_IPA:IPA_CTRL_PORT, ba.vc_RAN:CTRL);
+ /* connect IPA CTRL port with BSSMAP CTRL port */
+ log("Connecting CTRL RAN Emulation to IPA CTRL PORT");
+ connect(ba.sccpa.vc_IPA:IPA_CTRL_PORT, ba.vc_RAN:CTRL);
#endif
#endif
- }
- log("Starting RAN_Emulation");
- ba.vc_RAN.start(RAN_Emulation.main(valueof(ops), ""));
}
-
-
+ log("Starting RAN_Emulation");
+ ba.vc_RAN.start(RAN_Emulation.main(valueof(ops), ""));
}

function f_ran_adapter_start(inout RAN_Adapter ba) {
- ba.vc_SCCP.start(SCCPStart(ba.sccp_pars));
+ f_sccp_adapter_start(ba.sccpa);
}

function f_ran_adapter_cleanup(inout RAN_Adapter ba) {
- if (ba.vc_RAN != null) {
- if (ba.transport == RANAP_TRANSPORT_IuCS) {
+ if (ba.transport == RANAP_TRANSPORT_IuCS) {
#ifdef RAN_EMULATION_RANAP
- disconnect(ba.vc_RAN:RANAP, ba.vc_SCCP:SCCP_SP_PORT);
+ disconnect(ba.vc_RAN:RANAP, ba.sccpa.vc_SCCP:SCCP_SP_PORT);
#endif
- } else {
+ } else {
#ifdef RAN_EMULATION_BSSAP
- disconnect(ba.vc_RAN:BSSAP, ba.vc_SCCP:SCCP_SP_PORT);
+ disconnect(ba.vc_RAN:BSSAP, ba.sccpa.vc_SCCP:SCCP_SP_PORT);
#endif
- }
- ba.vc_RAN.stop;
}
- if (ba.transport == BSSAP_TRANSPORT_AoIP or
- ba.transport == RANAP_TRANSPORT_IuCS) {
- unmap(ba.vc_M3UA:SCTP_PORT, system:sctp);
- disconnect(ba.vc_M3UA:MTP3_SP_PORT, ba.vc_SCCP:MTP3_SCCP_PORT);
- ba.vc_M3UA.stop;
- }
- ba.vc_SCCP.stop;
+ ba.vc_RAN.stop;
+
+ f_sccp_adapter_cleanup(ba.sccpa);
}


diff --git a/library/SCCP_Adapter.ttcnpp b/library/SCCP_Adapter.ttcnpp
new file mode 100644
index 0000000..6945255
--- /dev/null
+++ b/library/SCCP_Adapter.ttcnpp
@@ -0,0 +1,168 @@
+module SCCP_Adapter {
+
+/* This module implements a 'dumb' SCCP adapter. It creates the IPA/M3UA and SCCP components and allows stacking a
+ * codec port on top. As a result, it provides the ability to transceive SCCP-User-SAP primitives
+ * with decoded uper layer 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.
+ */
+/* (C) 2017-2019 Harald Welte <laforge@gnumonks.org>
+ * (C) 2025 by 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 General_Types all;
+import from Osmocom_Types all;
+
+import from M3UA_Emulation all;
+import from MTP3asp_Types all;
+import from MTP3asp_PortType all;
+
+import from IPA_Emulation all;
+
+import from SCCP_Types all;
+import from SCCPasp_Types all;
+import from SCCP_Emulation all;
+import from SCCP_Templates all;
+
+import from SCTPasp_Types all;
+import from SCTPasp_PortType all;
+
+type enumerated SCCP_Adapter_Transport {
+ SCCP_TRANSPORT_SIGTRAN, /* 3GPP AoIP: SCCP over M3UA over SCTP */
+ SCCP_TRANSPORT_SCCPlite /* SCCPlite: SCCP over IPA over TCP */
+};
+
+type record SCCP_Adapter_Config_Sigtran {
+ SCTP_Association_Address sctp_addr
+ /* sctp_is_server: Controlled over module param M3UA_Emulation.tsp_SCTP_Server_Mode */
+};
+
+type record SCCP_Adapter_Config_Sccplite {
+ SCTP_Association_Address tcp_addr,
+ boolean tcp_is_server
+};
+
+type union SCCP_Adapter_Transport_ConfigUnion {
+ SCCP_Adapter_Config_Sigtran sigtran,
+ SCCP_Adapter_Config_Sccplite sccplite
+};
+
+type record SCCP_Adapter_Config {
+ SCCP_Adapter_Transport transport,
+ SCCP_Adapter_Transport_ConfigUnion tpars,
+ charstring sccp_service_type,
+ integer own_pc,
+ integer own_ssn,
+ integer peer_pc,
+ integer peer_ssn,
+ octetstring sio,
+ integer rctx
+} with { variant (tpars) "CROSSTAG(sigtran, transport = SCCP_TRANSPORT_SIGTRAN;
+ sccplite, transport = SCCP_TRANSPORT_SCCPlite;)"
+};
+type record of SCCP_Adapter_Config SCCP_Adapter_Configs;
+
+type record SCCP_Adapter {
+ /* component references */
+ M3UA_CT vc_M3UA, /* only in 3GPP AoIP */
+ IPA_Emulation_CT vc_IPA, /* only in SCCPlite */
+ IPA_EventWaiter_CT vc_WAIT, /* only in SCCPlite */
+ SCCP_CT vc_SCCP,
+
+ MSC_SCCP_MTP3_parameters sccp_pars,
+ SCCP_PAR_Address sccp_addr_own,
+ SCCP_PAR_Address sccp_addr_peer,
+ SCCP_Adapter_Config cfg
+};
+
+
+private function init_pars(inout SCCP_Adapter ba, in SCCP_Adapter_Config cfg) {
+ ba.sccp_pars := {
+ sio := {
+ ni := substr(oct2bit(cfg.sio),0,2),
+ prio := substr(oct2bit(cfg.sio),2,2),
+ si := substr(oct2bit(cfg.sio),4,4)
+ },
+ opc := cfg.own_pc,
+ dpc := cfg.peer_pc,
+ sls := 0,
+ sccp_serviceType := cfg.sccp_service_type,
+ ssn := cfg.own_ssn
+ };
+ ba.sccp_addr_own := valueof(ts_SccpAddr_PC_SSN(cfg.own_pc, cfg.own_ssn, cfg.sio, cfg.sccp_service_type));
+ ba.sccp_addr_peer := valueof(ts_SccpAddr_PC_SSN(cfg.peer_pc, cfg.peer_ssn, cfg.sio, cfg.sccp_service_type));
+ ba.cfg := cfg;
+}
+
+function f_sccp_adapter_init(inout SCCP_Adapter ba, in SCCP_Adapter_Config cfg, charstring id) {
+ init_pars(ba, cfg);
+
+ /* create components */
+ ba.vc_SCCP := SCCP_CT.create(id & "-SCCP") alive;
+ select (cfg.transport) {
+ case (SCCP_TRANSPORT_SIGTRAN) {
+ var template (omit) integer rctx;
+ if (not ispresent(cfg.rctx)) {
+ rctx := omit;
+ } else {
+ rctx := cfg.rctx;
+ }
+ ba.vc_M3UA := M3UA_CT.create(id & "-M3UA") alive;
+ map(ba.vc_M3UA:SCTP_PORT, system:sctp);
+ /* connect MTP3 service provider (M3UA) to lower side of SCCP */
+ connect(ba.vc_M3UA:MTP3_SP_PORT, ba.vc_SCCP:MTP3_SCCP_PORT);
+ ba.vc_M3UA.start(f_M3UA_Emulation(cfg.tpars.sigtran.sctp_addr, rctx));
+ }
+#ifdef IPA_EMULATION_SCCP
+ case (SCCP_TRANSPORT_SCCPlite) {
+ ba.vc_IPA := IPA_Emulation_CT.create(id & "-IPA") alive;
+ map(ba.vc_IPA:IPA_PORT, system:IPA_CODEC_PT);
+ /* connect MTP3 service provider (IPA) to lower side of SCCP */
+ connect(ba.vc_IPA:MTP3_SP_PORT, ba.vc_SCCP:MTP3_SCCP_PORT);
+ /* connect waiter to general IPA port (for ASP_IPA_Event) */
+ ba.vc_WAIT := IPA_EventWaiter_CT.create(id & "-IPA-WAIT") alive;
+ connect(ba.vc_IPA:IPA_SP_PORT, ba.vc_WAIT:IPA_SP_PORT);
+ ba.vc_WAIT.start(IPA_Emulation.waiter_main());
+ if (cfg.tpars.sccplite.tcp_is_server) {
+ ba.vc_IPA.start(IPA_Emulation.main_server(cfg.tpars.sccplite.tcp_addr.local_ip_addr,
+ cfg.tpars.sccplite.tcp_addr.local_sctp_port,
+ true, IPA_INIT_SEND_IPA_ID_ACK));
+ } else {
+ ba.vc_IPA.start(IPA_Emulation.main_client(cfg.tpars.sccplite.tcp_addr.remote_ip_addr,
+ cfg.tpars.sccplite.tcp_addr.remote_sctp_port,
+ cfg.tpars.sccplite.tcp_addr.local_ip_addr,
+ cfg.tpars.sccplite.tcp_addr.local_sctp_port));
+ }
+ /* wait until we received an IPA CCM ID_ACK */
+ ba.vc_WAIT.done;
+ disconnect(ba.vc_IPA:IPA_SP_PORT, ba.vc_WAIT:IPA_SP_PORT);
+ }
+#endif /* IPA_EMULATION_SCCP */
+ case else {
+ setverdict(fail, "Unsuppored RAN_Transport");
+ mtc.stop;
+ }
+ }
+
+
+}
+
+function f_sccp_adapter_start(inout SCCP_Adapter ba) {
+ ba.vc_SCCP.start(SCCPStart(ba.sccp_pars));
+}
+
+function f_sccp_adapter_cleanup(inout SCCP_Adapter ba) {
+ if (ba.cfg.transport == SCCP_TRANSPORT_SIGTRAN) {
+ unmap(ba.vc_M3UA:SCTP_PORT, system:sctp);
+ disconnect(ba.vc_M3UA:MTP3_SP_PORT, ba.vc_SCCP:MTP3_SCCP_PORT);
+ ba.vc_M3UA.stop;
+ }
+ ba.vc_SCCP.stop;
+}
+
+} with { encode "RAW" };
diff --git a/msc/MSC_Tests.default b/msc/MSC_Tests.default
index a89101b..61fa94c 100644
--- a/msc/MSC_Tests.default
+++ b/msc/MSC_Tests.default
@@ -47,39 +47,57 @@
MSC_Tests.mp_bssap_cfg := {
{
transport := BSSAP_TRANSPORT_AoIP,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23906, "127.0.0.1", 2905, "127.0.0.1" },
- own_pc := 193,
- own_ssn := 254,
- peer_pc := 185,
- peer_ssn := 254,
- sio := '83'O,
- rctx := 0
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23906, "127.0.0.1", 2905, "127.0.0.1" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 193,
+ own_ssn := 254,
+ peer_pc := 185,
+ peer_ssn := 254,
+ sio := '83'O,
+ rctx := 0
+ }
},
{
transport := BSSAP_TRANSPORT_AoIP,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23907, "127.0.0.1", 2905, "127.0.0.1" },
- own_pc := 194,
- own_ssn := 254,
- peer_pc := 185,
- peer_ssn := 254,
- sio := '83'O,
- rctx := 1
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23907, "127.0.0.1", 2905, "127.0.0.1" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 194,
+ own_ssn := 254,
+ peer_pc := 185,
+ peer_ssn := 254,
+ sio := '83'O,
+ rctx := 1
+ }
},
{
transport := RANAP_TRANSPORT_IuCS,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23908, "127.0.0.1", 2905, "127.0.0.1" },
- own_pc := 195,
- own_ssn := 142,
- peer_pc := 185,
- peer_ssn := 142,
- sio := '83'O,
- rctx := 2
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23908, "127.0.0.1", 2905, "127.0.0.1" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 195,
+ own_ssn := 142,
+ peer_pc := 185,
+ peer_ssn := 142,
+ sio := '83'O,
+ rctx := 2
+ }
}
};

diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index 12c6561..1c08a5d 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -29,6 +29,7 @@
import from SCCPasp_Types all;
import from SCCP_Types all;
import from SCCP_Emulation all;
+import from SCCP_Adapter all;

import from SCTPasp_Types all;
import from SCTPasp_PortType all;
@@ -395,8 +396,8 @@
* to f_init() when the high level functions of the BSC_ConnectionHandler are
* not needed. */
function f_init_bssap_direct() runs on MTC_CT {
- f_ran_adapter_init(g_bssap[0], mp_bssap_cfg[0], "MSC_Test", omit);
- connect(g_bssap[0].vc_SCCP:SCCP_SP_PORT, self:BSSAP_DIRECT);
+ f_sccp_adapter_init(g_bssap[0].sccpa, mp_bssap_cfg[0].sccp, "MSC_Test");
+ connect(g_bssap[0].sccpa.vc_SCCP:SCCP_SP_PORT, self:BSSAP_DIRECT);

/* Start guard timer and activate it as default */
Tguard_direct.start
@@ -425,8 +426,8 @@
check_imei_error := false
};
var BSC_ConnHdlrPars pars := {
- sccp_addr_own := g_bssap[ran_idx].sccp_addr_own,
- sccp_addr_peer := g_bssap[ran_idx].sccp_addr_peer,
+ sccp_addr_own := g_bssap[ran_idx].sccpa.sccp_addr_own,
+ sccp_addr_peer := g_bssap[ran_idx].sccpa.sccp_addr_peer,
cell_id := valueof(ts_CellId_CGI('262'H, '42'H, 23, 42)),
imei := f_gen_imei(imsi_suffix),
imsi := f_gen_imsi(imsi_suffix),
@@ -2308,15 +2309,15 @@
var boolean reset_ack_seen := false;
f_init_bssap_direct();

- f_ran_adapter_start(g_bssap[0]);
+ f_sccp_adapter_start(g_bssap[0].sccpa);

f_sleep(3.0);

/* Make a blind connection attemt, to trigger the deadlock condition */
- BSSAP_DIRECT.send(ts_BSSAP_CONNECT_req(g_bssap[0].sccp_addr_peer, g_bssap[0].sccp_addr_own, 1, omit));
+ BSSAP_DIRECT.send(ts_BSSAP_CONNECT_req(g_bssap[0].sccpa.sccp_addr_peer, g_bssap[0].sccpa.sccp_addr_own, 1, omit));

/* Send a BSSMAP reset */
- BSSAP_DIRECT.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccp_addr_peer, g_bssap[0].sccp_addr_own, ts_BSSMAP_Reset(0)));
+ BSSAP_DIRECT.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccpa.sccp_addr_peer, g_bssap[0].sccpa.sccp_addr_own, ts_BSSMAP_Reset(0)));
T.start
alt {
[] BSSAP_DIRECT.receive(tr_BSSAP_UNITDATA_ind(?, ?, tr_BSSMAP_ResetAck)) {
@@ -2326,7 +2327,7 @@

/* Acknowledge MSC sided reset requests */
[] BSSAP_DIRECT.receive(tr_BSSAP_UNITDATA_ind(?, ?, tr_BSSMAP_Reset)) {
- BSSAP_DIRECT.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccp_addr_peer, g_bssap[0].sccp_addr_own, ts_BSSMAP_ResetAck));
+ BSSAP_DIRECT.send(ts_BSSAP_UNITDATA_req(g_bssap[0].sccpa.sccp_addr_peer, g_bssap[0].sccpa.sccp_addr_own, ts_BSSMAP_ResetAck));
repeat;
}

diff --git a/msc/gen_links.sh b/msc/gen_links.sh
index f18c2f8..6a9903d 100755
--- a/msc/gen_links.sh
+++ b/msc/gen_links.sh
@@ -96,7 +96,7 @@
FILES+="IPA_Types.ttcn IPA_Emulation.ttcnpp IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc "
FILES+="PCO_Types.ttcn GSUP_Types.ttcn GSUP_Templates.ttcn GSUP_Emulation.ttcn "
FILES+="Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn L3_Templates.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn L3_Common.ttcn "
-FILES+="RAN_Emulation.ttcnpp BSSAP_CodecPort.ttcn BSSMAP_Templates.ttcn RAN_Adapter.ttcnpp SDP_Templates.ttcn MGCP_Types.ttcn MGCP_Templates.ttcn MGCP_CodecPort_CtrlFunct.ttcn MGCP_Emulation.ttcn "
+FILES+="RAN_Emulation.ttcnpp BSSAP_CodecPort.ttcn BSSMAP_Templates.ttcn SCCP_Adapter.ttcnpp RAN_Adapter.ttcnpp SDP_Templates.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 "
diff --git a/sgsn/SGSN_Tests.default b/sgsn/SGSN_Tests.default
index b31d86c..330dc1b 100644
--- a/sgsn/SGSN_Tests.default
+++ b/sgsn/SGSN_Tests.default
@@ -42,15 +42,21 @@
SGSN_Tests.mp_ranap_cfg := {
{
transport := RANAP_TRANSPORT_IuCS,
- transport_is_server := false,
- sccp_service_type := "mtp3_itu",
- sctp_addr := { 23908, "127.0.0.104", 2905, "127.0.0.200" },
- own_pc := 195,
- own_ssn := 142,
- peer_pc := 188, # 0.23.4
- peer_ssn := 142,
- sio := '83'O,
- rctx := 2
+ sccp := {
+ transport := SCCP_TRANSPORT_SIGTRAN,
+ tpars := {
+ sigtran := {
+ sctp_addr := { 23908, "127.0.0.104", 2905, "127.0.0.200" }
+ }
+ },
+ sccp_service_type := "mtp3_itu",
+ own_pc := 195,
+ own_ssn := 142,
+ peer_pc := 188, # 0.23.4
+ peer_ssn := 142,
+ sio := '83'O,
+ rctx := 2
+ }
}
};

diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn
index ab818d0..a94eb3a 100644
--- a/sgsn/SGSN_Tests.ttcn
+++ b/sgsn/SGSN_Tests.ttcn
@@ -282,7 +282,7 @@
id := id & "-RNC_GTP";

var Gtp1uEmulationCfg gtp_cfg := {
- gtpu_bind_ip := mp_ranap_cfg[rnc_idx].sctp_addr.local_ip_addr,
+ gtpu_bind_ip := mp_ranap_cfg[rnc_idx].sccp.tpars.sigtran.sctp_addr.local_ip_addr,
gtpu_bind_port := GTP1U_PORT,
use_gtpu_daemon := false
};
@@ -507,8 +507,8 @@
runs on test_CT return BSSGP_ConnHdlr {
var BSSGP_ConnHdlr vc_conn;
if (g_iu_enable) {
- pars.sccp_addr_local := g_iu[0].ranap.sccp_addr_own;
- pars.sccp_addr_peer := g_iu[0].ranap.sccp_addr_peer;
+ pars.sccp_addr_local := g_iu[0].ranap.sccpa.sccp_addr_own;
+ pars.sccp_addr_peer := g_iu[0].ranap.sccpa.sccp_addr_peer;
pars.grnc_id := g_iu[0].grnc_id;
}

diff --git a/sgsn/SGSN_Tests_Iu.ttcn b/sgsn/SGSN_Tests_Iu.ttcn
index 71c20ef..78215bb 100644
--- a/sgsn/SGSN_Tests_Iu.ttcn
+++ b/sgsn/SGSN_Tests_Iu.ttcn
@@ -43,7 +43,7 @@
}

private function f_TC_iu_attach(charstring id) runs on BSSGP_ConnHdlr {
- var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sctp_addr.local_ip_addr));
+ var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sccp.tpars.sigtran.sctp_addr.local_ip_addr));

/* first perform regular attach */
f_gmm_attach(umts_aka_challenge := true, force_gsm_sres := false, ran_index := 3);
@@ -89,7 +89,7 @@
}

private function f_TC_iu_attach_geran_rau(charstring id) runs on BSSGP_ConnHdlr {
- var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sctp_addr.local_ip_addr));
+ var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sccp.tpars.sigtran.sctp_addr.local_ip_addr));

/* first perform regular attach */
f_gmm_attach(umts_aka_challenge := true, force_gsm_sres := false, ran_index := 3);
@@ -115,7 +115,7 @@
}

private function f_TC_geran_attach_iu_rau(charstring id) runs on BSSGP_ConnHdlr {
- var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sctp_addr.local_ip_addr));
+ var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sccp.tpars.sigtran.sctp_addr.local_ip_addr));

/* first perform regular attach */
f_gmm_attach(umts_aka_challenge := true, force_gsm_sres := false, ran_index := 0);
@@ -138,7 +138,7 @@
}

private function f_TC_attach_pdp_act_user(charstring id) runs on BSSGP_ConnHdlr {
- var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sctp_addr.local_ip_addr));
+ var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sccp.tpars.sigtran.sctp_addr.local_ip_addr));

/* first perform regular attach */
f_gmm_attach(umts_aka_challenge := true, force_gsm_sres := false, ran_index := 3);
@@ -210,7 +210,7 @@
* deactivate the already created PDP context against GGSN. */
private function f_TC_attach_pdp_act_user_addr_itu_x213_ipv4lentoolarge(charstring id) runs on BSSGP_ConnHdlr {
var integer ran_index := 3;
- var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sctp_addr.local_ip_addr));
+ var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sccp.tpars.sigtran.sctp_addr.local_ip_addr));
timer T := 5.0;
apars.exp_rej_cause:= '26'O; /* Network failure */

@@ -248,7 +248,7 @@
/* Test UE going to PMM IDLE state after having activated the PDP context.
* SGSN is expected to update the GGSN cancelling the Direct Tunnel feature. */
private function f_TC_attach_pdp_act_pmm_idle(charstring id) runs on BSSGP_ConnHdlr {
- var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sctp_addr.local_ip_addr));
+ var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sccp.tpars.sigtran.sctp_addr.local_ip_addr));

/* first perform regular attach */
f_gmm_attach(umts_aka_challenge := true, force_gsm_sres := false, ran_index := 3);
@@ -284,7 +284,7 @@
/* TODO: same as TC_attach_pdp_act_pmm_idle, but with pdp_status=0000, meaning UE lost status about previous PDP Ctx.
* We should see SGSN doing DeletePDPCtxReq towards GGSN instead of UdatePDPCtxReq, then probably re-create it. */
private function f_TC_attach_pdp_act_pmm_idle_lost_pdp_status(charstring id) runs on BSSGP_ConnHdlr {
- var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sctp_addr.local_ip_addr));
+ var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sccp.tpars.sigtran.sctp_addr.local_ip_addr));

/* first perform regular attach */
f_gmm_attach(umts_aka_challenge := true, force_gsm_sres := false, ran_index := 3);
@@ -320,7 +320,7 @@
/* Test UE going to PMM IDLE state after having activated the PDP context.
* SGSN is expected to update the GGSN cancelling the Direct Tunnel feature. */
private function f_TC_pmm_idle_rx_mt_data(charstring id) runs on BSSGP_ConnHdlr {
- var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sctp_addr.local_ip_addr));
+ var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sccp.tpars.sigtran.sctp_addr.local_ip_addr));

/* first perform regular attach */
f_gmm_attach(umts_aka_challenge := true, force_gsm_sres := false, ran_index := 3);
@@ -367,7 +367,7 @@
of the RAB to make sure PDP context is established, since it may be that RNC got
restarted. */
private function f_TC_update_ctx_err_ind_from_ggsn(charstring id) runs on BSSGP_ConnHdlr {
- var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sctp_addr.local_ip_addr));
+ var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip, mp_ranap_cfg[0].sccp.tpars.sigtran.sctp_addr.local_ip_addr));
var integer ran_index := 3;

/* first perform regular attach */
diff --git a/sgsn/gen_links.sh b/sgsn/gen_links.sh
index e991fd5..338b9f5 100755
--- a/sgsn/gen_links.sh
+++ b/sgsn/gen_links.sh
@@ -91,7 +91,7 @@
FILES+="StatsD_Types.ttcn StatsD_CodecPort.ttcn StatsD_CodecPort_CtrlFunct.ttcn StatsD_CodecPort_CtrlFunctdef.cc StatsD_Checker.ttcnpp "
FILES+="LLC_Templates.ttcn L3_Templates.ttcn L3_Common.ttcn "
FILES+="ITU_X213_Types.ttcn "
-FILES+="RAN_Emulation.ttcnpp RAN_Adapter.ttcnpp SCCP_Templates.ttcn "
+FILES+="RAN_Emulation.ttcnpp SCCP_Adapter.ttcnpp RAN_Adapter.ttcnpp SCCP_Templates.ttcn "
# IPA_Emulation + dependencies
FILES+="IPA_Types.ttcn IPA_Emulation.ttcnpp IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc Native_Functions.ttcn Native_FunctionDefs.cc "
FILES+="PCO_Types.ttcn GSUP_Types.ttcn GSUP_Templates.ttcn GSUP_Emulation.ttcn "

To view, visit change 41133. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I0558d74d53ceb1b33c4f3d583f1b4489f6d7ee60
Gerrit-Change-Number: 41133
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin@sysmocom.de>