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;
+}
+
 
 }