diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2011-06-04 14:51:51 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2011-08-25 23:16:29 +0200 |
commit | 6e7e0fe514650c4258bb099967b6c27d70893a31 (patch) | |
tree | 8c8e1c33fa068104d3253721b4e145edc8cff7b5 | |
parent | 6cadfa73282acc84e057e76f5ad73f0d3d106f84 (diff) |
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.
-rw-r--r-- | openbsc/include/openbsc/osmo_bsc.h | 4 | ||||
-rw-r--r-- | openbsc/src/osmo-bsc/osmo_bsc_api.c | 23 | ||||
-rw-r--r-- | 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; |