aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2010-11-06 20:15:17 +0100
committerHolger Hans Peter Freyther <zecke@selfish.org>2010-11-15 20:06:48 +0100
commit7e9010892d3b9977d076d0429193f265b6612477 (patch)
tree641b71a57d1472ee3375cac646049a85eda31e30 /openbsc
parentb8781d2cd5175c6de2d7fcb51bc3d736f309320b (diff)
bsc: Make open/close work on the sccp data
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/include/openbsc/osmo_bsc.h5
-rw-r--r--openbsc/src/bsc/osmo_bsc_api.c6
-rw-r--r--openbsc/src/bsc/osmo_bsc_sccp.c11
3 files changed, 12 insertions, 10 deletions
diff --git a/openbsc/include/openbsc/osmo_bsc.h b/openbsc/include/openbsc/osmo_bsc.h
index 1d68cbe0b..032193e83 100644
--- a/openbsc/include/openbsc/osmo_bsc.h
+++ b/openbsc/include/openbsc/osmo_bsc.h
@@ -16,15 +16,16 @@ struct osmo_bsc_sccp_con {
struct timer_list sccp_it_timeout;
struct timer_list sccp_cc_timeout;
+ struct gsm_subscriber_connection *conn;
uint8_t new_subscriber;
};
struct bsc_api *osmo_bsc_api();
int bsc_queue_for_msc(struct gsm_subscriber_connection *conn, struct msgb *msg);
-int bsc_open_connection(struct gsm_subscriber_connection *conn, struct msgb *msg);
+int bsc_open_connection(struct osmo_bsc_sccp_con *sccp, struct msgb *msg);
int bsc_create_new_connection(struct gsm_subscriber_connection *conn);
-int bsc_delete_connection(struct gsm_subscriber_connection *conn);
+int bsc_delete_connection(struct osmo_bsc_sccp_con *sccp);
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);
diff --git a/openbsc/src/bsc/osmo_bsc_api.c b/openbsc/src/bsc/osmo_bsc_api.c
index b8423b27b..8ee857d11 100644
--- a/openbsc/src/bsc/osmo_bsc_api.c
+++ b/openbsc/src/bsc/osmo_bsc_api.c
@@ -99,12 +99,12 @@ static int bsc_compl_l3(struct gsm_subscriber_connection *conn, struct msgb *msg
conn->bts->cell_identity);
if (!resp) {
LOGP(DMSC, LOGL_DEBUG, "Failed to create layer3 message.\n");
- bsc_delete_connection(conn);
+ bsc_delete_connection(conn->sccp_con);
return BSC_API_CONN_POL_REJECT;
}
- if (bsc_open_connection(conn, resp) != 0) {
- bsc_delete_connection(conn);
+ if (bsc_open_connection(conn->sccp_con, resp) != 0) {
+ bsc_delete_connection(conn->sccp_con);
msgb_free(resp);
return BSC_API_CONN_POL_REJECT;
}
diff --git a/openbsc/src/bsc/osmo_bsc_sccp.c b/openbsc/src/bsc/osmo_bsc_sccp.c
index 620082f80..b1d128b40 100644
--- a/openbsc/src/bsc/osmo_bsc_sccp.c
+++ b/openbsc/src/bsc/osmo_bsc_sccp.c
@@ -126,29 +126,30 @@ int bsc_create_new_connection(struct gsm_subscriber_connection *conn)
bsc_con->sccp = sccp;
bsc_con->msc_con = net->msc_data->msc_con;
+ bsc_con->conn = conn;
llist_add(&bsc_con->entry, &active_connections);
conn->sccp_con = bsc_con;
return 0;
}
-int bsc_open_connection(struct gsm_subscriber_connection *conn, struct msgb *msg)
+int bsc_open_connection(struct osmo_bsc_sccp_con *conn, struct msgb *msg)
{
LOGP(DMSC, LOGL_ERROR, "Not implemented yet.\n");
return -1;
}
-int bsc_delete_connection(struct gsm_subscriber_connection *conn)
+int bsc_delete_connection(struct osmo_bsc_sccp_con *sccp)
{
- struct osmo_bsc_sccp_con *sccp = conn->sccp_con;
-
if (!sccp)
return 0;
+ if (sccp->conn)
+ LOGP(DMSC, LOGL_ERROR, "Should have been cleared.\n");
+
llist_del(&sccp->entry);
bsc_del_timer(&sccp->sccp_it_timeout);
bsc_del_timer(&sccp->sccp_cc_timeout);
talloc_free(sccp);
- conn->sccp_con = NULL;
return 0;
}