bsc: Move the finding of a MSC into the filter code

For responding to paging on the right link we will need to
figure out if the msg is a paging response.
This commit is contained in:
Holger Hans Peter Freyther 2011-06-07 19:57:02 +02:00
parent 354c87cdfc
commit 076af1c54b
3 changed files with 21 additions and 20 deletions

View File

@ -36,6 +36,7 @@ int bsc_create_new_connection(struct gsm_subscriber_connection *conn,
struct osmo_msc_data *msc);
int bsc_delete_connection(struct osmo_bsc_sccp_con *sccp);
struct osmo_msc_data *bsc_find_msc(struct gsm_subscriber_connection *conn, struct msgb *);
int bsc_scan_bts_msg(struct gsm_subscriber_connection *conn, struct msgb *msg);
int bsc_scan_msc_msg(struct gsm_subscriber_connection *conn, struct msgb *msg);

View File

@ -81,25 +81,6 @@ static void bsc_cipher_mode_compl(struct gsm_subscriber_connection *conn,
queue_msg_or_return(resp);
}
static struct osmo_msc_data *find_msc(struct gsm_subscriber_connection *conn,
struct msgb *msg)
{
struct osmo_bsc_data *bsc;
struct osmo_msc_data *msc;
bsc = conn->bts->network->bsc_data;
llist_for_each_entry(msc, &bsc->mscs, entry) {
if (!msc->msc_con->is_authenticated)
continue;
/* force round robin by moving it to the end */
llist_move_tail(&msc->entry, &bsc->mscs);
return msc;
}
return NULL;
}
/*
* Instruct to reserve data for a new connectiom, create the complete
* layer three message, send it to open the connection.
@ -115,7 +96,7 @@ static int bsc_compl_l3(struct gsm_subscriber_connection *conn, struct msgb *msg
LOGP(DMSC, LOGL_INFO, "Tx MSC COMPL L3\n");
/* find the MSC link we want to use */
msc = find_msc(conn, msg);
msc = bsc_find_msc(conn, msg);
if (!msc) {
LOGP(DMSC, LOGL_ERROR, "Failed to find a MSC for a connection.\n");
return -1;

View File

@ -97,6 +97,25 @@ static int handle_page_resp(struct gsm_subscriber_connection *conn, struct msgb
subscr_put(subscr);
return 0;
}
struct osmo_msc_data *bsc_find_msc(struct gsm_subscriber_connection *conn,
struct msgb *msg)
{
struct osmo_bsc_data *bsc;
struct osmo_msc_data *msc;
bsc = conn->bts->network->bsc_data;
llist_for_each_entry(msc, &bsc->mscs, entry) {
if (!msc->msc_con->is_authenticated)
continue;
/* force round robin by moving it to the end */
llist_move_tail(&msc->entry, &bsc->mscs);
return msc;
}
return NULL;
}
/**
* This is used to scan a message for extra functionality of the BSC. This