diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libbsc/abis_rsl.c | 23 | ||||
-rw-r--r-- | src/libbsc/bsc_dyn_ts.c | 19 |
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); } |