properly receive BSSMAP Clear Complete and Iu Release Complete

When sending a BSSMAP Clear or Iu Release, do not immediately discard the conn,
but wait until a BSSMAP Clear Complete / Iu Release Complete has been received.

Hence we will no longer show in the log that an incoming Release/Clear Complete
belongs to an unknown subscriber, but will still be around to properly log the
release.

Related: OS#3122
Change-Id: Ie4c6aaba3866d6e5b98004e8870a215e8cf8ffc1
diff --git a/include/osmocom/msc/gsm_data.h b/include/osmocom/msc/gsm_data.h
index 4cfe08d..c5e7aaf 100644
--- a/include/osmocom/msc/gsm_data.h
+++ b/include/osmocom/msc/gsm_data.h
@@ -148,6 +148,7 @@
 	struct {
 		struct ranap_ue_conn_ctx *ue_ctx;
 		uint8_t rab_id;
+		bool waiting_for_release_complete;
 	} iu;
 
 	struct {
@@ -164,6 +165,8 @@
 		 * to reference the SCCP connection that is
 		 * associated with this subscriber connection */
 		uint32_t conn_id;
+
+		bool waiting_for_clear_complete;
 	} a;
 };
 
diff --git a/include/osmocom/msc/osmo_msc.h b/include/osmocom/msc/osmo_msc.h
index f7d89a2..632b231 100644
--- a/include/osmocom/msc/osmo_msc.h
+++ b/include/osmocom/msc/osmo_msc.h
@@ -77,8 +77,12 @@
 void msc_subscr_conn_communicating(struct gsm_subscriber_connection *conn);
 void msc_subscr_conn_close(struct gsm_subscriber_connection *conn,
 			   uint32_t cause);
+void msc_subscr_conn_mo_close(struct gsm_subscriber_connection *conn, uint32_t cause);
 bool msc_subscr_conn_in_release(struct gsm_subscriber_connection *conn);
 
+void msc_subscr_conn_rx_bssmap_clear_complete(struct gsm_subscriber_connection *conn);
+void msc_subscr_conn_rx_iu_release_complete(struct gsm_subscriber_connection *conn);
+
 enum msc_subscr_conn_use {
 	MSC_CONN_USE_UNTRACKED = -1,
 	MSC_CONN_USE_COMPL_L3,
@@ -107,6 +111,8 @@
 void _msc_subscr_conn_put(struct gsm_subscriber_connection *conn,
 			  enum msc_subscr_conn_use balance_token,
 			  const char *file, int line);
+bool msc_subscr_conn_used_by(struct gsm_subscriber_connection *conn,
+			     enum msc_subscr_conn_use token);
 
 void msc_stop_paging(struct vlr_subscr *vsub);