bsc: Stop using net->bsc->msc and get the right msc from somewhere else
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_msc.c b/openbsc/src/osmo-bsc/osmo_bsc_msc.c
index a9da589..64f2800 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_msc.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_msc.c
@@ -270,6 +270,7 @@
 	ipaccess_rcvmsg_base(msg, bfd);
 
 	/* initialize the networking. This includes sending a GSM08.08 message */
+	msg->cb[0] = (unsigned long) data;
 	if (hh->proto == IPAC_PROTO_IPACCESS) {
 		if (msg->l2h[0] == IPAC_MSGT_ID_ACK)
 			initialize_if_needed(data->msc_con);
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_sccp.c b/openbsc/src/osmo-bsc/osmo_bsc_sccp.c
index f7d3477..30dea0f 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_sccp.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_sccp.c
@@ -152,8 +152,8 @@
 
 static int msc_sccp_read(struct msgb *msgb, unsigned int length, void *data)
 {
-	struct gsm_network *net = (struct gsm_network *) data;
-	return bsc_handle_udt(net, net->bsc_data->msc.msc_con, msgb, length);
+	struct osmo_msc_data *msc = (struct osmo_msc_data *) msgb->cb[0];
+	return bsc_handle_udt(msc->network, msc->msc_con, msgb, length);
 }
 
 int bsc_queue_for_msc(struct osmo_bsc_sccp_con *conn, struct msgb *msg)
@@ -182,11 +182,13 @@
 int bsc_create_new_connection(struct gsm_subscriber_connection *conn)
 {
 	struct gsm_network *net;
+	struct bsc_msc_connection *msc;
 	struct osmo_bsc_sccp_con *bsc_con;
 	struct sccp_connection *sccp;
 
 	net = conn->bts->network;
-	if (!net->bsc_data->msc.msc_con->is_authenticated) {
+	msc = net->bsc_data->msc.msc_con;
+	if (!msc->is_authenticated) {
 		LOGP(DMSC, LOGL_ERROR, "Not connected to a MSC. Not forwarding data.\n");
 		return -1;
 	}
@@ -223,7 +225,7 @@
 	INIT_LLIST_HEAD(&bsc_con->sccp_queue);
 
 	bsc_con->sccp = sccp;
-	bsc_con->msc_con = net->bsc_data->msc.msc_con;
+	bsc_con->msc_con = msc;
 	bsc_con->conn = conn;
 	llist_add_tail(&bsc_con->entry, &active_connections);
 	conn->sccp_con = bsc_con;