From 6e7e0fe514650c4258bb099967b6c27d70893a31 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Sat, 4 Jun 2011 14:51:51 +0200 Subject: 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. --- openbsc/include/openbsc/osmo_bsc.h | 4 +++- openbsc/src/osmo-bsc/osmo_bsc_api.c | 23 +++++++++++++---------- openbsc/src/osmo-bsc/osmo_bsc_sccp.c | 8 ++++---- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/openbsc/include/openbsc/osmo_bsc.h b/openbsc/include/openbsc/osmo_bsc.h index d267bcee0..ffa0b5747 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 @@ struct osmo_bsc_sccp_con { /* 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 9cb0f9ee3..03949cfbc 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 @@ static int bsc_compl_l3(struct gsm_subscriber_connection *conn, struct msgb *msg 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 @@ static int bsc_compl_l3(struct gsm_subscriber_connection *conn, struct msgb *msg 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 c52104914..fbc4ff99a 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_queue_for_msc(struct osmo_bsc_sccp_con *conn, struct msgb *msg) 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 @@ int bsc_create_new_connection(struct gsm_subscriber_connection *conn) 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(&bsc_con->entry, &active_connections); conn->sccp_con = bsc_con; -- cgit v1.2.3