summaryrefslogtreecommitdiffstats
path: root/openbsc/src/osmo-bsc
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2012-08-30 16:43:28 +0200
committerHolger Hans Peter Freyther <zecke@selfish.org>2013-01-28 15:41:27 +0100
commit3d119f1de474340bdfb98e237735e1a3170252cb (patch)
tree5c9d4eb2403e0cf1964fcc6c88c7416a4be09dfd /openbsc/src/osmo-bsc
parente30d40de0e0b9b55c551d87015a791d4a9bc418b (diff)
bsc: A BTS excluded from the RF lock should be allowed to make a connection
When introducing the exclude for the BTS lock the RF stayed up but all connections were immediately released. Optionally pass the BTS as second parameter and check the exclude bit. Tested-with: rf-lock-exclude/RFLockExcludeTest.st
Diffstat (limited to 'openbsc/src/osmo-bsc')
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_bssap.c2
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_grace.c4
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_sccp.c5
3 files changed, 5 insertions, 6 deletions
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_bssap.c b/openbsc/src/osmo-bsc/osmo_bsc_bssap.c
index 6b8504d21..8ea5a65ef 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_bssap.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_bssap.c
@@ -413,7 +413,7 @@ static int bssmap_rcvmsg_udt(struct osmo_msc_data *msc,
ret = bssmap_handle_reset_ack(msc, msg, length);
break;
case BSS_MAP_MSG_PAGING:
- if (bsc_grace_allow_new_connection(msc->network))
+ if (bsc_grace_allow_new_connection(msc->network, NULL))
ret = bssmap_handle_paging(msc, msg, length);
break;
}
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_grace.c b/openbsc/src/osmo-bsc/osmo_bsc_grace.c
index 3f73b5018..ad0a37e9c 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_grace.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_grace.c
@@ -24,10 +24,12 @@
#include <openbsc/gsm_04_80.h>
#include <openbsc/signal.h>
-int bsc_grace_allow_new_connection(struct gsm_network *network)
+int bsc_grace_allow_new_connection(struct gsm_network *network, struct gsm_bts *bts)
{
if (!network->bsc_data->rf_ctrl)
return 1;
+ if (bts && bts->excl_from_rf_lock)
+ return 1;
return network->bsc_data->rf_ctrl->policy == S_RF_ON;
}
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_sccp.c b/openbsc/src/osmo-bsc/osmo_bsc_sccp.c
index 37eb1b799..3533d6df0 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_sccp.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_sccp.c
@@ -190,12 +190,9 @@ int bsc_queue_for_msc(struct osmo_bsc_sccp_con *conn, struct msgb *msg)
int bsc_create_new_connection(struct gsm_subscriber_connection *conn,
struct osmo_msc_data *msc)
{
- struct gsm_network *net;
struct osmo_bsc_sccp_con *bsc_con;
struct sccp_connection *sccp;
- net = conn->bts->network;
-
/* This should not trigger */
if (!msc->msc_con->is_authenticated) {
LOGP(DMSC, LOGL_ERROR,
@@ -203,7 +200,7 @@ int bsc_create_new_connection(struct gsm_subscriber_connection *conn,
return -1;
}
- if (!bsc_grace_allow_new_connection(net)) {
+ if (!bsc_grace_allow_new_connection(conn->bts->network, conn->bts)) {
LOGP(DMSC, LOGL_NOTICE, "BSC in grace period. No new connections.\n");
return -1;
}