move libiu to osmo-iuh/libosmo-ranap

Remove libiu here, use the functions from libosmo-ranap instead, by applying
the ranap_ / RANAP_ prefix.

Corresponding change-id in osmo-iuh.git is I6a3f7ad15be03fb94689b4af6ccfa828c25f45c0

To be able to run the msc_vlr tests for RAN_UTRAN_IU without Iu client headers
available, add iu_dummy.h, containing mere function signatures that match
iu_dummy.c and a mostly empty struct ranap_ue_conn_ctx.

Make sure we can build with and without --enable-iu: include osmo-iuh headers
only with --enable-iu.

Change-Id: Ib8c4fcdb4766c5e575618b95ce16dce51063206b
diff --git a/src/libmsc/Makefile.am b/src/libmsc/Makefile.am
index 9f246b3..c9b8bb4 100644
--- a/src/libmsc/Makefile.am
+++ b/src/libmsc/Makefile.am
@@ -35,8 +35,6 @@
 	gsm_04_14.c \
 	gsm_04_80.c \
 	gsm_subscriber.c \
-	iucs.c \
-	iucs_ranap.c \
 	mncc.c \
 	mncc_builtin.c \
 	mncc_sock.c \
@@ -52,7 +50,12 @@
 	meas_feed.c \
 	subscr_conn.c \
 	$(NULL)
-if !BUILD_IU
+if BUILD_IU
+libmsc_a_SOURCES += \
+	iucs.c \
+	iucs_ranap.c \
+	$(NULL)
+else
 libmsc_a_SOURCES += \
 	iu_dummy.c \
 	$(NULL)
diff --git a/src/libmsc/a_iface_bssap.c b/src/libmsc/a_iface_bssap.c
index 561ccde..e8a2293 100644
--- a/src/libmsc/a_iface_bssap.c
+++ b/src/libmsc/a_iface_bssap.c
@@ -29,7 +29,6 @@
 #include <openbsc/gsm_data.h>
 #include <openbsc/a_iface_bssap.h>
 #include <openbsc/a_iface.h>
-#include <openbsc/iu.h>
 #include <openbsc/osmo_msc.h>
 #include <osmocom/core/byteswap.h>
 #include <openbsc/a_reset.h>
diff --git a/src/libmsc/gsm_04_08.c b/src/libmsc/gsm_04_08.c
index b6746a5..21bc2b8 100644
--- a/src/libmsc/gsm_04_08.c
+++ b/src/libmsc/gsm_04_08.c
@@ -72,13 +72,11 @@
 #include <osmocom/core/utils.h>
 #include <osmocom/gsm/tlv.h>
 #include <osmocom/crypt/auth.h>
-
-#include <openbsc/msc_ifaces.h>
-
 #ifdef BUILD_IU
-#include <openbsc/iu.h>
+#include <osmocom/ranap/iu_client.h>
 #endif
 
+#include <openbsc/msc_ifaces.h>
 #include <openbsc/a_iface.h>
 
 #include <assert.h>
@@ -3412,7 +3410,7 @@
 #ifdef BUILD_IU
 		DEBUGP(DMM, "-> SECURITY MODE CONTROL %s\n",
 		       vlr_subscr_name(conn->vsub));
-		return iu_tx_sec_mode_cmd(conn->iu.ue_ctx, tuple, 0, 1);
+		return ranap_iu_tx_sec_mode_cmd(conn->iu.ue_ctx, &tuple->vec, 0, 1);
 #else
 		LOGP(DMM, LOGL_ERROR, "Cannot send Security Mode Control over RAN_UTRAN_IU,"
 		     " built without Iu support\n");
diff --git a/src/libmsc/gsm_subscriber.c b/src/libmsc/gsm_subscriber.c
index 73361a1..09540c1 100644
--- a/src/libmsc/gsm_subscriber.c
+++ b/src/libmsc/gsm_subscriber.c
@@ -20,6 +20,8 @@
  *
  */
 
+#include "../../bscconfig.h"
+
 #include <unistd.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -32,6 +34,12 @@
 
 #include <osmocom/vty/vty.h>
 
+#ifdef BUILD_IU
+#include <osmocom/ranap/iu_client.h>
+#else
+#include <openbsc/iu_dummy.h>
+#endif
+
 #include <openbsc/gsm_subscriber.h>
 #include <openbsc/gsm_04_08.h>
 #include <openbsc/debug.h>
@@ -40,7 +48,6 @@
 #include <openbsc/db.h>
 #include <openbsc/chan_alloc.h>
 #include <openbsc/vlr.h>
-#include <openbsc/iu.h>
 #include <openbsc/osmo_msc.h>
 #include <openbsc/msc_ifaces.h>
 #include <openbsc/a_iface.h>
@@ -108,10 +115,10 @@
 	case RAN_GERAN_A:
 		return a_iface_tx_paging(vsub->imsi, vsub->tmsi, vsub->lac);
 	case RAN_UTRAN_IU:
-		return iu_page_cs(vsub->imsi,
-				  vsub->tmsi == GSM_RESERVED_TMSI?
-				  NULL : &vsub->tmsi,
-				  vsub->lac);
+		return ranap_iu_page_cs(vsub->imsi,
+					vsub->tmsi == GSM_RESERVED_TMSI?
+					NULL : &vsub->tmsi,
+					vsub->lac);
 	default:
 		break;
 	}
diff --git a/src/libmsc/iu_dummy.c b/src/libmsc/iu_dummy.c
index 1f5dffb..e9d335e 100644
--- a/src/libmsc/iu_dummy.c
+++ b/src/libmsc/iu_dummy.c
@@ -26,39 +26,39 @@
 #include "../../bscconfig.h"
 #ifndef BUILD_IU
 
-#include <stdint.h>
-#include <stdbool.h>
+#include <openbsc/iu_dummy.h>
 
 #include <osmocom/core/logging.h>
 #include <osmocom/vty/logging.h>
 #include <osmocom/core/msgb.h>
 
 struct msgb;
-struct ue_conn_ctx;
+struct ranap_ue_conn_ctx;
 struct gsm_auth_tuple;
 struct RANAP_Cause;
+struct osmo_auth_vector;
 
-int iu_tx(struct msgb *msg, uint8_t sapi)
+int ranap_iu_tx(struct msgb *msg, uint8_t sapi)
 {
 	LOGP(DLGLOBAL, LOGL_INFO, "iu_tx() dummy called, NOT transmitting %d bytes: %s\n",
 	     msg->len, osmo_hexdump(msg->data, msg->len));
 	return 0;
 }
 
-int iu_tx_sec_mode_cmd(struct ue_conn_ctx *uectx, struct gsm_auth_tuple *tp,
-		       int send_ck)
+int ranap_iu_tx_sec_mode_cmd(struct ranap_ue_conn_ctx *uectx, struct osmo_auth_vector *vec,
+			     int send_ck)
 {
 	LOGP(DLGLOBAL, LOGL_INFO, "iu_tx_sec_mode_cmd() dummy called, NOT transmitting Security Mode Command\n");
 	return 0;
 }
 
-int iu_page_cs(const char *imsi, const uint32_t *tmsi, uint16_t lac)
+int ranap_iu_page_cs(const char *imsi, const uint32_t *tmsi, uint16_t lac)
 {
 	LOGP(DLGLOBAL, LOGL_INFO, "iu_page_cs() dummy called, NOT paging\n");
 	return 23;
 }
 
-int iu_page_ps(const char *imsi, const uint32_t *ptmsi, uint16_t lac, uint8_t rac)
+int ranap_iu_page_ps(const char *imsi, const uint32_t *ptmsi, uint16_t lac, uint8_t rac)
 {
 	LOGP(DLGLOBAL, LOGL_INFO, "iu_page_ps() dummy called, NOT paging\n");
 	return 0;
@@ -72,19 +72,19 @@
 	return NULL;
 }
 
-int iu_rab_act(struct ue_conn_ctx *ue_ctx, struct msgb *msg)
+int ranap_iu_rab_act(struct ranap_ue_conn_ctx *ue_ctx, struct msgb *msg)
 {
 	LOGP(DLGLOBAL, LOGL_INFO, "iu_rab_act() dummy called, NOT activating RAB\n");
 	return 0;
 }
 
-int iu_tx_common_id(struct ue_conn_ctx *uectx, const char *imsi)
+int ranap_iu_tx_common_id(struct ranap_ue_conn_ctx *uectx, const char *imsi)
 {
 	LOGP(DLGLOBAL, LOGL_INFO, "iu_tx_common_id() dummy called, NOT sending CommonID\n");
 	return 0;
 }
 
-int iu_tx_release(struct ue_conn_ctx *ctx, const struct RANAP_Cause *cause)
+int ranap_iu_tx_release(struct ranap_ue_conn_ctx *ctx, const struct RANAP_Cause *cause)
 {
 	LOGP(DLGLOBAL, LOGL_INFO, "iu_tx_release() dummy called, NOT sending Release\n");
 	return 0;
diff --git a/src/libmsc/iucs.c b/src/libmsc/iucs.c
index be026c8..04b9ece 100644
--- a/src/libmsc/iucs.c
+++ b/src/libmsc/iucs.c
@@ -25,17 +25,17 @@
 #include <inttypes.h>
 
 #include <osmocom/core/logging.h>
+#include <osmocom/ranap/iu_client.h>
 #include <openbsc/debug.h>
 
 #include <openbsc/gsm_data.h>
-#include <openbsc/iu.h>
 #include <openbsc/gsm_subscriber.h>
 #include <openbsc/osmo_msc.h>
 #include <openbsc/vlr.h>
 
 /* For A-interface see libbsc/bsc_api.c subscr_con_allocate() */
 static struct gsm_subscriber_connection *subscr_conn_allocate_iu(struct gsm_network *network,
-								 struct ue_conn_ctx *ue,
+								 struct ranap_ue_conn_ctx *ue,
 								 uint16_t lac)
 {
 	struct gsm_subscriber_connection *conn;
@@ -57,7 +57,7 @@
 	return conn;
 }
 
-static int same_ue_conn(struct ue_conn_ctx *a, struct ue_conn_ctx *b)
+static int same_ue_conn(struct ranap_ue_conn_ctx *a, struct ranap_ue_conn_ctx *b)
 {
 	if (a == b)
 		return 1;
@@ -103,7 +103,7 @@
  * connection IDs, or return NULL if not found. */
 struct gsm_subscriber_connection *subscr_conn_lookup_iu(
 						struct gsm_network *network,
-						struct ue_conn_ctx *ue)
+						struct ranap_ue_conn_ctx *ue)
 {
 	struct gsm_subscriber_connection *conn;
 
@@ -126,7 +126,7 @@
 }
 
 /* Receive MM/CC/... message from IuCS (SCCP user SAP).
- * msg->dst must reference a struct ue_conn_ctx, which identifies the peer that
+ * msg->dst must reference a struct ranap_ue_conn_ctx, which identifies the peer that
  * sent the msg.
  *
  * For A-interface see libbsc/bsc_api.c gsm0408_rcvmsg(). */
@@ -134,10 +134,10 @@
 			uint16_t *lac)
 {
 	int rc;
-	struct ue_conn_ctx *ue_ctx;
+	struct ranap_ue_conn_ctx *ue_ctx;
 	struct gsm_subscriber_connection *conn;
 
-	ue_ctx = (struct ue_conn_ctx*)msg->dst;
+	ue_ctx = (struct ranap_ue_conn_ctx*)msg->dst;
 
 	/* TODO: are there message types that could allow us to skip this
 	 * search? */
diff --git a/src/libmsc/iucs_ranap.c b/src/libmsc/iucs_ranap.c
index c016474..45de1ca 100644
--- a/src/libmsc/iucs_ranap.c
+++ b/src/libmsc/iucs_ranap.c
@@ -27,11 +27,11 @@
 #include <osmocom/core/logging.h>
 
 #include <osmocom/ranap/ranap_ies_defs.h>
+#include <osmocom/ranap/iu_client.h>
 
 #include <openbsc/debug.h>
 #include <openbsc/gsm_data.h>
 #include <openbsc/gsm_subscriber.h>
-#include <openbsc/iu.h>
 #include <openbsc/iucs.h>
 #include <openbsc/vlr.h>
 #include <openbsc/iucs_ranap.h>
@@ -67,7 +67,7 @@
 }
 
 int iucs_rx_ranap_event(struct gsm_network *network,
-			struct ue_conn_ctx *ue_ctx, int type, void *data)
+			struct ranap_ue_conn_ctx *ue_ctx, int type, void *data)
 {
 	struct gsm_subscriber_connection *conn;
 
@@ -79,19 +79,19 @@
 	}
 
 	switch (type) {
-	case IU_EVENT_IU_RELEASE:
-	case IU_EVENT_LINK_INVALIDATED:
+	case RANAP_IU_EVENT_IU_RELEASE:
+	case RANAP_IU_EVENT_LINK_INVALIDATED:
 		LOGP(DIUCS, LOGL_INFO, "IuCS release for %s\n",
 		     vlr_subscr_name(conn->vsub));
 		msc_subscr_conn_close(conn, 0);
 		return 0;
 
-	case IU_EVENT_SECURITY_MODE_COMPLETE:
+	case RANAP_IU_EVENT_SECURITY_MODE_COMPLETE:
 		LOGP(DIUCS, LOGL_INFO, "IuCS security mode complete for %s\n",
 		     vlr_subscr_name(conn->vsub));
 		return iucs_rx_sec_mode_compl(conn,
 					      (RANAP_SecurityModeCompleteIEs_t*)data);
-	case IU_EVENT_RAB_ASSIGN:
+	case RANAP_IU_EVENT_RAB_ASSIGN:
 		return iucs_rx_rab_assign(conn,
 				(RANAP_RAB_SetupOrModifiedItemIEs_t*)data);
 	default:
diff --git a/src/libmsc/msc_ifaces.c b/src/libmsc/msc_ifaces.c
index 7d2e898..262bf98 100644
--- a/src/libmsc/msc_ifaces.c
+++ b/src/libmsc/msc_ifaces.c
@@ -23,7 +23,6 @@
 #include <openbsc/debug.h>
 #include <openbsc/gsm_data.h>
 #include <openbsc/msc_ifaces.h>
-#include <openbsc/iu.h>
 #include <openbsc/gsm_subscriber.h>
 #include <openbsc/transaction.h>
 #include <openbsc/mgcp.h>
@@ -34,10 +33,13 @@
 #include "../../bscconfig.h"
 
 #ifdef BUILD_IU
+#include <osmocom/ranap/iu_client.h>
 extern struct msgb *ranap_new_msg_rab_assign_voice(uint8_t rab_id,
 						   uint32_t rtp_ip,
 						   uint16_t rtp_port,
 						   bool use_x213_nsap);
+#else
+#include <openbsc/iu_dummy.h>
 #endif /* BUILD_IU */
 
 static int msc_tx(struct gsm_subscriber_connection *conn, struct msgb *msg)
@@ -57,7 +59,7 @@
 
 	case RAN_UTRAN_IU:
 		msg->dst = conn->iu.ue_ctx;
-		return iu_tx(msg, 0);
+		return ranap_iu_tx(msg, 0);
 
 	default:
 		LOGP(DMSC, LOGL_ERROR,
@@ -134,10 +136,10 @@
 
 	DEBUGP(DIUCS, "%s: tx CommonID %s\n",
 	       vlr_subscr_name(conn->vsub), conn->vsub->imsi);
-	return iu_tx_common_id(conn->iu.ue_ctx, conn->vsub->imsi);
+	return ranap_iu_tx_common_id(conn->iu.ue_ctx, conn->vsub->imsi);
 }
 
-static int iu_rab_act_cs(struct ue_conn_ctx *uectx, uint8_t rab_id,
+static int iu_rab_act_cs(struct ranap_ue_conn_ctx *uectx, uint8_t rab_id,
 			 uint32_t rtp_ip, uint16_t rtp_port)
 {
 #ifdef BUILD_IU
@@ -145,7 +147,7 @@
 	bool use_x213_nsap;
 	uint32_t conn_id = uectx->conn_id;
 
-	use_x213_nsap = (uectx->rab_assign_addr_enc == NSAP_ADDR_ENC_X213);
+	use_x213_nsap = (uectx->rab_assign_addr_enc == RANAP_NSAP_ADDR_ENC_X213);
 
 	LOGP(DIUCS, LOGL_DEBUG, "Assigning RAB: conn_id=%u, rab_id=%d,"
 	     " rtp=%x:%u, use_x213_nsap=%d\n", conn_id, rab_id, rtp_ip,
@@ -155,7 +157,7 @@
 					     use_x213_nsap);
 	msg->l2h = msg->data;
 
-	if (iu_rab_act(uectx, msg))
+	if (ranap_iu_rab_act(uectx, msg))
 		LOGP(DIUCS, LOGL_ERROR, "Failed to send RAB Assignment:"
 		     " conn_id=%d rab_id=%d rtp=%x:%u\n",
 		     conn_id, rab_id, rtp_ip, rtp_port);
@@ -170,7 +172,6 @@
 {
 	struct gsm_trans *trans = priv;
 	struct gsm_subscriber_connection *conn = trans->conn;
-	struct ue_conn_ctx *uectx = conn->iu.ue_ctx;
 	uint32_t rtp_ip;
 	int rc;
 
@@ -195,7 +196,7 @@
 
 	if (trans->conn->via_ran == RAN_UTRAN_IU) {
 		/* Assign a voice channel via RANAP on 3G */
-		if (iu_rab_act_cs(uectx, conn->iu.rab_id, rtp_ip, conn->rtp.port_subscr))
+		if (iu_rab_act_cs(conn->iu.ue_ctx, conn->iu.rab_id, rtp_ip, conn->rtp.port_subscr))
 			goto rab_act_cs_error;
 	} else if (trans->conn->via_ran == RAN_GERAN_A) {
 		/* Assign a voice channel via A on 2G */
@@ -234,7 +235,7 @@
 	mgcp = conn->network->mgcpgw.client;
 
 #ifdef BUILD_IU
-	/* FIXME: HACK. where to scope the RAB Id? At the conn / subscriber / ue_conn_ctx? */
+	/* FIXME: HACK. where to scope the RAB Id? At the conn / subscriber / ranap_ue_conn_ctx? */
 	static uint8_t next_iu_rab_id = 1;
 	if (conn->via_ran == RAN_UTRAN_IU)
 		conn->iu.rab_id = next_iu_rab_id ++;
diff --git a/src/libmsc/msc_vty.c b/src/libmsc/msc_vty.c
index 01e7e82..6ae4529 100644
--- a/src/libmsc/msc_vty.c
+++ b/src/libmsc/msc_vty.c
@@ -23,15 +23,19 @@
 /* NOTE: I would have liked to call this the MSC_NODE instead of the MSC_NODE,
  * but MSC_NODE already exists to configure a remote MSC for osmo-bsc. */
 
+#include "../../bscconfig.h"
+
 #include <inttypes.h>
 
 #include <osmocom/vty/command.h>
+#ifdef BUILD_IU
+#include <osmocom/ranap/iu_client.h>
+#endif
 
 #include <openbsc/vty.h>
 #include <openbsc/gsm_data.h>
 #include <openbsc/gsm_subscriber.h>
 #include <openbsc/vlr.h>
-#include <openbsc/iu.h>
 
 static struct cmd_node msc_node = {
 	MSC_NODE,
@@ -99,7 +103,7 @@
 
 	mgcpgw_client_config_write(vty, " ");
 #ifdef BUILD_IU
-	iu_vty_config_write(vty, " ");
+	ranap_iu_vty_config_write(vty, " ");
 #endif
 
 	return CMD_SUCCESS;
@@ -153,6 +157,6 @@
 
 	mgcpgw_client_vty_init(MSC_NODE, &msc_network->mgcpgw.conf);
 #ifdef BUILD_IU
-	iu_vty_init(MSC_NODE, &msc_network->iu.rab_assign_addr_enc);
+	ranap_iu_vty_init(MSC_NODE, &msc_network->iu.rab_assign_addr_enc);
 #endif
 }
diff --git a/src/libmsc/osmo_msc.c b/src/libmsc/osmo_msc.c
index 866cfbd..4d24f22 100644
--- a/src/libmsc/osmo_msc.c
+++ b/src/libmsc/osmo_msc.c
@@ -28,11 +28,17 @@
 #include <openbsc/db.h>
 #include <openbsc/vlr.h>
 #include <openbsc/osmo_msc.h>
-#include <openbsc/iu.h>
 #include <openbsc/a_iface.h>
 
 #include <openbsc/gsm_04_11.h>
 
+#include "../../bscconfig.h"
+#ifdef BUILD_IU
+#include <osmocom/ranap/iu_client.h>
+#else
+#include <openbsc/iu_dummy.h>
+#endif
+
 /* Receive a SAPI-N-REJECT from BSC */
 void msc_sapi_n_reject(struct gsm_subscriber_connection *conn, int dlci)
 {
@@ -285,7 +291,7 @@
 
 	switch (conn->via_ran) {
 	case RAN_UTRAN_IU:
-		iu_tx_release(conn->iu.ue_ctx, NULL);
+		ranap_iu_tx_release(conn->iu.ue_ctx, NULL);
 		/* FIXME: keep the conn until the Iu Release Outcome is
 		 * received from the UE, or a timeout expires. For now, the log
 		 * says "unknown UE" for each release outcome. */
diff --git a/src/libmsc/subscr_conn.c b/src/libmsc/subscr_conn.c
index cdeeae9..bcab8e4 100644
--- a/src/libmsc/subscr_conn.c
+++ b/src/libmsc/subscr_conn.c
@@ -30,10 +30,8 @@
 #include <openbsc/debug.h>
 #include <openbsc/transaction.h>
 #include <openbsc/signal.h>
-#include <openbsc/iu.h>
 #include <openbsc/a_iface.h>
 
-
 #define SUBSCR_CONN_TIMEOUT 5 /* seconds */
 
 static const struct value_string subscr_conn_fsm_event_names[] = {