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:
parent
354c87cdfc
commit
076af1c54b
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue