aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libbsc/abis_rsl.c23
-rw-r--r--src/libbsc/bsc_dyn_ts.c19
2 files changed, 20 insertions, 22 deletions
diff --git a/src/libbsc/abis_rsl.c b/src/libbsc/abis_rsl.c
index 167ef6bfb..ffbf63038 100644
--- a/src/libbsc/abis_rsl.c
+++ b/src/libbsc/abis_rsl.c
@@ -2495,6 +2495,16 @@ int rsl_ipacc_mdcx(struct gsm_lchan *lchan, uint32_t ip, uint16_t port,
return abis_rsl_sendmsg(msg);
}
+static bool check_gprs_enabled(struct gsm_bts_trx_ts *ts)
+{
+ if (ts->trx->bts->gprs.mode == BTS_GPRS_NONE) {
+ LOGP(DRSL, LOGL_NOTICE, "%s: GPRS mode is 'none': not activating PDCH.\n",
+ gsm_ts_and_pchan_name(ts));
+ return false;
+ }
+ return true;
+}
+
int rsl_ipacc_pdch_activate(struct gsm_bts_trx_ts *ts, int act)
{
struct msgb *msg = rsl_msgb_alloc();
@@ -2512,8 +2522,9 @@ int rsl_ipacc_pdch_activate(struct gsm_bts_trx_ts *ts, int act)
}
if (act){
- /* Callers should heed the GPRS mode. */
- OSMO_ASSERT(ts->trx->bts->gprs.mode != BTS_GPRS_NONE);
+ if (!check_gprs_enabled(ts))
+ return -ENOTSUP;
+
msg_type = RSL_MT_IPAC_PDCH_ACT;
ts->flags |= TS_F_PDCH_ACT_PENDING;
} else {
@@ -2647,8 +2658,6 @@ int dyn_ts_switchover_start(struct gsm_bts_trx_ts *ts,
int rc = -EIO;
OSMO_ASSERT(ts->pchan == GSM_PCHAN_TCH_F_TCH_H_PDCH);
- DEBUGP(DRSL, "%s starting switchover to %s\n",
- gsm_ts_and_pchan_name(ts), gsm_pchan_name(to_pchan));
if (ts->dyn.pchan_is != ts->dyn.pchan_want) {
LOGP(DRSL, LOGL_ERROR,
@@ -2680,6 +2689,12 @@ int dyn_ts_switchover_start(struct gsm_bts_trx_ts *ts,
}
}
+ if (to_pchan == GSM_PCHAN_PDCH && !check_gprs_enabled(ts))
+ return -ENOTSUP;
+
+ DEBUGP(DRSL, "%s starting switchover to %s\n",
+ gsm_ts_and_pchan_name(ts), gsm_pchan_name(to_pchan));
+
/* Record that we're busy switching. */
ts->dyn.pchan_want = to_pchan;
diff --git a/src/libbsc/bsc_dyn_ts.c b/src/libbsc/bsc_dyn_ts.c
index aa3c252f4..6a1cff703 100644
--- a/src/libbsc/bsc_dyn_ts.c
+++ b/src/libbsc/bsc_dyn_ts.c
@@ -27,31 +27,14 @@ void tchf_pdch_ts_init(struct gsm_bts_trx_ts *ts)
{
int rc;
- if (ts->trx->bts->gprs.mode == BTS_GPRS_NONE) {
- LOGP(DRSL, LOGL_NOTICE, "%s: GPRS mode is 'none':"
- " not activating PDCH.\n",
- gsm_ts_and_pchan_name(ts));
- return;
- }
-
- LOGP(DRSL, LOGL_DEBUG, "%s: trying to PDCH ACT\n",
- gsm_ts_and_pchan_name(ts));
-
rc = rsl_ipacc_pdch_activate(ts, 1);
- if (rc != 0)
+ if (rc != 0 && rc != -ENOTSUP)
LOGP(DRSL, LOGL_ERROR, "%s %s: PDCH ACT failed\n",
gsm_ts_name(ts), gsm_pchan_name(ts->pchan));
}
void tchf_tchh_pdch_ts_init(struct gsm_bts_trx_ts *ts)
{
- if (ts->trx->bts->gprs.mode == BTS_GPRS_NONE) {
- LOGP(DRSL, LOGL_NOTICE, "%s: GPRS mode is 'none':"
- " not activating PDCH.\n",
- gsm_ts_and_pchan_name(ts));
- return;
- }
-
dyn_ts_switchover_start(ts, GSM_PCHAN_PDCH);
}