sgsn: Proper shutdown of RAN_Adapter components
Otherwise TTCN3 errors sproadically during shutdown:
""""
SCCP_Emulation.ttcn:5661 Receive operation on port SCCP_SP_PORT succeeded, message from SGSN_Test_0-RAN(414)
...
SCCP_Emulation.ttcn:5293 Sent on MTP3_SCCP_PORT to SGSN_Test_0-M3UA(415) @SCCP_Types.ASP_MTP3_TRANSFERreq_sccp
SCCP_Emulation.ttcn:5293 Outgoing message was mapped to @MTP3asp_Types.ASP_MTP3_TRANSFERreq
SCCP_Emulation.ttcn:5293 Dynamic test case error: Sending data on the connection of port MTP3_SCCP_PORT to 415:MTP3_SP_PORT failed. (Broken pipe)
SCCP_Emulation.ttcn:5293 setverdict(error): none -> error
"""
Similar shutdown is already done in f_cleanup() of SCCP_Tests.ttcn.
Related: OS#4176
Change-Id: I471eb851e5d41de5d8d974ec81be27024d7d313a
diff --git a/library/RAN_Adapter.ttcnpp b/library/RAN_Adapter.ttcnpp
index e995e8d..f84fd34 100644
--- a/library/RAN_Adapter.ttcnpp
+++ b/library/RAN_Adapter.ttcnpp
@@ -47,6 +47,7 @@
MSC_SCCP_MTP3_parameters sccp_pars,
SCCP_PAR_Address sccp_addr_own,
SCCP_PAR_Address sccp_addr_peer,
+ RAN_Transport transport,
/* handler mode */
RAN_Emulation_CT vc_RAN
@@ -79,6 +80,7 @@
};
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;
}
@@ -92,6 +94,8 @@
ba.vc_SCCP := SCCP_CT.create(id & "-SCCP");
if (isvalue(ops)) {
ba.vc_RAN := RAN_Emulation_CT.create(id & "-RAN");
+ } else {
+ ba.vc_RAN := null;
}
select (cfg.transport) {
case (BSSAP_TRANSPORT_AoIP, RANAP_TRANSPORT_IuCS) {
@@ -186,5 +190,27 @@
ba.vc_SCCP.start(SCCPStart(ba.sccp_pars));
}
+function f_ran_adapter_cleanup(inout RAN_Adapter ba) {
+ if (ba.vc_RAN != null) {
+ if (ba.transport == RANAP_TRANSPORT_IuCS) {
+#ifdef RAN_EMULATION_RANAP
+ disconnect(ba.vc_RAN:RANAP, ba.vc_SCCP:SCCP_SP_PORT);
+#endif
+ } else {
+#ifdef RAN_EMULATION_BSSAP
+ disconnect(ba.vc_RAN:BSSAP, ba.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;
+}
+
}