mirror of
https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
synced 2025-10-23 08:12:01 +00:00
bsc: Hand the msc_connection to the UDT handling, pass it to paging
Pass the osmo_msc_data to the paging sub system, change the code to pass the osmo_msc_data instead of network + bsc_msc_conn.
This commit is contained in:
@@ -40,7 +40,7 @@ struct osmo_msc_data *bsc_find_msc(struct gsm_subscriber_connection *conn, struc
|
||||
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);
|
||||
|
||||
int bsc_handle_udt(struct gsm_network *net, struct bsc_msc_connection *conn, struct msgb *msg, unsigned int length);
|
||||
int bsc_handle_udt(struct osmo_msc_data *msc, struct msgb *msg, unsigned int length);
|
||||
int bsc_handle_dt1(struct osmo_bsc_sccp_con *conn, struct msgb *msg, unsigned int len);
|
||||
|
||||
int bsc_ctrl_cmds_install();
|
||||
|
@@ -98,7 +98,7 @@ enum gsm48_chan_mode gsm88_to_chan_mode(enum gsm0808_permitted_speech speech)
|
||||
return GSM48_CMODE_SPEECH_AMR;
|
||||
}
|
||||
|
||||
static int bssmap_handle_reset_ack(struct gsm_network *net,
|
||||
static int bssmap_handle_reset_ack(struct osmo_msc_data *msc,
|
||||
struct msgb *msg, unsigned int length)
|
||||
{
|
||||
LOGP(DMSC, LOGL_NOTICE, "Reset ACK from MSC\n");
|
||||
@@ -106,7 +106,7 @@ static int bssmap_handle_reset_ack(struct gsm_network *net,
|
||||
}
|
||||
|
||||
/* GSM 08.08 § 3.2.1.19 */
|
||||
static int bssmap_handle_paging(struct gsm_network *net,
|
||||
static int bssmap_handle_paging(struct osmo_msc_data *msc,
|
||||
struct msgb *msg, unsigned int payload_length)
|
||||
{
|
||||
struct gsm_subscriber *subscr;
|
||||
@@ -167,7 +167,7 @@ static int bssmap_handle_paging(struct gsm_network *net,
|
||||
LOGP(DMSC, LOGL_ERROR, "eMLPP is not handled\n");
|
||||
}
|
||||
|
||||
subscr = subscr_get_or_create(net, mi_string);
|
||||
subscr = subscr_get_or_create(msc->network, mi_string);
|
||||
if (!subscr) {
|
||||
LOGP(DMSC, LOGL_ERROR, "Failed to allocate a subscriber for %s\n", mi_string);
|
||||
return -1;
|
||||
@@ -177,7 +177,7 @@ static int bssmap_handle_paging(struct gsm_network *net,
|
||||
subscr->tmsi = tmsi;
|
||||
|
||||
LOGP(DMSC, LOGL_INFO, "Paging request from MSC IMSI: '%s' TMSI: '0x%x/%u' LAC: 0x%x\n", mi_string, tmsi, tmsi, lac);
|
||||
paging_request(net, subscr, chan_needed, NULL, NULL);
|
||||
paging_request(msc->network, subscr, chan_needed, NULL, msc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -395,7 +395,7 @@ reject:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int bssmap_rcvmsg_udt(struct gsm_network *net,
|
||||
static int bssmap_rcvmsg_udt(struct osmo_msc_data *msc,
|
||||
struct msgb *msg, unsigned int length)
|
||||
{
|
||||
int ret = 0;
|
||||
@@ -410,11 +410,11 @@ static int bssmap_rcvmsg_udt(struct gsm_network *net,
|
||||
|
||||
switch (msg->l4h[0]) {
|
||||
case BSS_MAP_MSG_RESET_ACKNOWLEDGE:
|
||||
ret = bssmap_handle_reset_ack(net, msg, length);
|
||||
ret = bssmap_handle_reset_ack(msc, msg, length);
|
||||
break;
|
||||
case BSS_MAP_MSG_PAGING:
|
||||
if (bsc_grace_allow_new_connection(net))
|
||||
ret = bssmap_handle_paging(net, msg, length);
|
||||
if (bsc_grace_allow_new_connection(msc->network))
|
||||
ret = bssmap_handle_paging(msc, msg, length);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -499,8 +499,7 @@ static int dtap_rcvmsg(struct osmo_bsc_sccp_con *conn,
|
||||
return gsm0808_submit_dtap(conn->conn, gsm48, header->link_id, 1);
|
||||
}
|
||||
|
||||
int bsc_handle_udt(struct gsm_network *network,
|
||||
struct bsc_msc_connection *conn,
|
||||
int bsc_handle_udt(struct osmo_msc_data *msc,
|
||||
struct msgb *msgb, unsigned int length)
|
||||
{
|
||||
struct bssmap_header *bs;
|
||||
@@ -520,7 +519,7 @@ int bsc_handle_udt(struct gsm_network *network,
|
||||
switch (bs->type) {
|
||||
case BSSAP_MSG_BSS_MANAGEMENT:
|
||||
msgb->l4h = &msgb->l3h[sizeof(*bs)];
|
||||
bssmap_rcvmsg_udt(network, msgb, length - sizeof(*bs));
|
||||
bssmap_rcvmsg_udt(msc, msgb, length - sizeof(*bs));
|
||||
break;
|
||||
default:
|
||||
LOGP(DMSC, LOGL_NOTICE, "Unimplemented msg type: %s\n",
|
||||
|
@@ -161,7 +161,7 @@ static int msc_sccp_accept(struct sccp_connection *connection, void *data)
|
||||
static int msc_sccp_read(struct msgb *msgb, unsigned int length, void *data)
|
||||
{
|
||||
struct osmo_msc_data *msc = (struct osmo_msc_data *) msgb->cb[0];
|
||||
return bsc_handle_udt(msc->network, msc->msc_con, msgb, length);
|
||||
return bsc_handle_udt(msc, msgb, length);
|
||||
}
|
||||
|
||||
int bsc_queue_for_msc(struct osmo_bsc_sccp_con *conn, struct msgb *msg)
|
||||
|
Reference in New Issue
Block a user