aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorPhilipp Maier <pmaier@sysmocom.de>2017-06-30 14:17:55 +0200
committerPhilipp Maier <pmaier@sysmocom.de>2017-06-30 14:17:55 +0200
commit9360d613f4e878caf469e9049262e8f1a567e92f (patch)
treeb883191aecefd440f07927605b84ab2b8e577547 /openbsc
parente80608d9fdacc6411d31def68dd00285642eecbd (diff)
osmo-bsc: only clear connections of a specific MSC
The BSC clears all connections on reception of a BSSAP RESET, however, the RESET command must not affect the connections of other MSCs. Ensure that only the connections of the MSC who actually sent the BSSAP RESET are cleared.
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_sigtran.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_sigtran.c b/openbsc/src/osmo-bsc/osmo_bsc_sigtran.c
index 451329271..3ff26d0a2 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_sigtran.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_sigtran.c
@@ -373,10 +373,23 @@ void osmo_bsc_sigtran_reset(struct bsc_msc_data *msc)
/* Close all open connections */
llist_for_each_entry_safe(conn, conn_temp, &active_connections, entry) {
- if (conn->conn)
- gsm0808_clear(conn->conn);
- bsc_notify_msc_lost(conn);
- osmo_bsc_sigtran_del_conn(conn);
+
+ /* We only may close connections which actually belong to this
+ * MSC. All other open connections are left untouched */
+ if (conn->msc == msc) {
+ /* Notify active connection users via USSD that the MSC is down */
+ bsc_notify_msc_lost(conn);
+
+ /* Take down all occopied RF channels */
+ if (conn->conn)
+ gsm0808_clear(conn->conn);
+
+ /* Disconnect all Sigtran connections */
+ osmo_sccp_tx_disconn(msc->a.sccp_user, conn->conn_id, &msc->a.g_calling_addr, 0);
+
+ /* Delete subscriber connection */
+ osmo_bsc_sigtran_del_conn(conn);
+ }
}
}