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.
This commit is contained in:
parent
f31a4a4810
commit
4cdb050d13
|
@ -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;
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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_tail(&bsc_con->entry, &active_connections);
|
||||
conn->sccp_con = bsc_con;
|
||||
|
|
Loading…
Reference in New Issue