bsc: Move away from ->bsc.msc to use the selected MSC

For multiple MSCs we should only have one place where the MSC
is selected and the rest will extract it from somewhere.
diff --git a/openbsc/include/openbsc/osmo_bsc.h b/openbsc/include/openbsc/osmo_bsc.h
index 2620147..d8465c9 100644
--- a/openbsc/include/openbsc/osmo_bsc.h
+++ b/openbsc/include/openbsc/osmo_bsc.h
@@ -6,6 +6,8 @@
 #include "bsc_api.h"
 
 struct sccp_connection;
+struct osmo_msc_data;
+struct bsc_msc_connection;
 
 struct osmo_bsc_sccp_con {
 	struct llist_head entry;
@@ -15,7 +17,7 @@
 
 	/* SCCP connection realted */
 	struct sccp_connection *sccp;
-	struct bsc_msc_connection *msc_con;
+	struct osmo_msc_data *msc;
 	struct osmo_timer_list sccp_it_timeout;
 	struct osmo_timer_list sccp_cc_timeout;
 
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_api.c b/openbsc/src/osmo-bsc/osmo_bsc_api.c
index eb7d38a..04305c2 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_api.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_api.c
@@ -45,18 +45,18 @@
 	} \
 	bsc_queue_for_msc(conn->sccp_con, resp);
 
-static uint16_t get_network_code_for_msc(struct gsm_network *net)
+static uint16_t get_network_code_for_msc(struct osmo_msc_data *msc)
 {
-	if (net->bsc_data->msc.core_ncc != -1)
-		return net->bsc_data->msc.core_ncc;
-	return net->network_code;
+	if (msc->core_ncc != -1)
+		return msc->core_ncc;
+	return msc->network->network_code;
 }
 
-static uint16_t get_country_code_for_msc(struct gsm_network *net)
+static uint16_t get_country_code_for_msc(struct osmo_msc_data *msc)
 {
-	if (net->bsc_data->msc.core_mcc != -1)
-		return net->bsc_data->msc.core_mcc;
-	return net->country_code;
+	if (msc->core_mcc != -1)
+		return msc->core_mcc;
+	return msc->network->country_code;
 }
 
 static void bsc_sapi_n_reject(struct gsm_subscriber_connection *conn, int dlci)
@@ -89,8 +89,8 @@
 			uint16_t chosen_channel)
 {
 	struct msgb *resp;
-	uint16_t network_code = get_network_code_for_msc(conn->bts->network);
-	uint16_t country_code = get_country_code_for_msc(conn->bts->network);
+	uint16_t network_code;
+	uint16_t country_code;
 
 	LOGP(DMSC, LOGL_INFO, "Tx MSC COMPL L3\n");
 
@@ -98,6 +98,9 @@
 	if (bsc_create_new_connection(conn) != 0)
 		return BSC_API_CONN_POL_REJECT;
 
+	network_code = get_network_code_for_msc(conn->sccp_con->msc);
+	country_code = get_country_code_for_msc(conn->sccp_con->msc);
+
 	bsc_scan_bts_msg(conn, msg);
 	resp = gsm0808_create_layer3(msg, network_code, country_code,
 				     conn->bts->location_area_code,
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_sccp.c b/openbsc/src/osmo-bsc/osmo_bsc_sccp.c
index 30dea0f..529b488 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_sccp.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_sccp.c
@@ -182,13 +182,13 @@
 int bsc_create_new_connection(struct gsm_subscriber_connection *conn)
 {
 	struct gsm_network *net;
-	struct bsc_msc_connection *msc;
+	struct osmo_msc_data *msc;
 	struct osmo_bsc_sccp_con *bsc_con;
 	struct sccp_connection *sccp;
 
 	net = conn->bts->network;
-	msc = net->bsc_data->msc.msc_con;
-	if (!msc->is_authenticated) {
+	msc = &net->bsc_data->msc;
+	if (!msc->msc_con->is_authenticated) {
 		LOGP(DMSC, LOGL_ERROR, "Not connected to a MSC. Not forwarding data.\n");
 		return -1;
 	}
@@ -225,7 +225,7 @@
 	INIT_LLIST_HEAD(&bsc_con->sccp_queue);
 
 	bsc_con->sccp = sccp;
-	bsc_con->msc_con = msc;
+	bsc_con->msc = msc;
 	bsc_con->conn = conn;
 	llist_add_tail(&bsc_con->entry, &active_connections);
 	conn->sccp_con = bsc_con;