diff options
-rw-r--r-- | src/common/rsl.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/src/common/rsl.c b/src/common/rsl.c index 802e577c..919981dd 100644 --- a/src/common/rsl.c +++ b/src/common/rsl.c @@ -758,17 +758,31 @@ int rsl_tx_rf_rel_ack(struct gsm_lchan *lchan) gsm_ts_and_pchan_name(lchan->ts), lchan->nr); /* well, what to do about it ... carry on and hope it's fine. */ } - /* remember the fact that the TS is now released */ - lchan->ts->dyn.pchan_is = GSM_PCHAN_NONE; - /* Continue to ack the release below. (This is a non-standard rel ack invented - * specifically for GSM_PCHAN_TCH_F_TCH_H_PDCH). */ - send_rel_ack = true; + if (lchan->ts->dyn.pchan_want != GSM_PCHAN_PDCH) { + /* Continue to ack the release below. (This is a non-standard rel ack invented + * specifically for GSM_PCHAN_TCH_F_TCH_H_PDCH). */ + /* remember the fact that the TS is now released */ + lchan->ts->dyn.pchan_is = GSM_PCHAN_NONE; + send_rel_ack = true; + } else { + /* Administrteively locked TRX, no need to + inform BSC. Keep pchan_is for when we are + unlocked again, since lower layers are stil + lconfigured for PDCH but we simply annonced + non-availability to PCU */ + send_rel_ack = false; + } break; case GSM_PCHAN_TCH_F_PDCH: /* GSM_PCHAN_TCH_F_PDCH, does not require a rel ack. The caller * l1sap_info_rel_cnf() will continue with bts_model_ts_disconnect(). */ send_rel_ack = false; break; + case GSM_PCHAN_PDCH: + /* Release was instructed by the BTS, for instance because the TRX is + * administrateively Locked */ + send_rel_ack = false; + break; default: LOGPLCHAN(lchan, DRSL, LOGL_ERROR, "PCU rel ack for unexpected lchan kind %s\n", gsm_pchan_name(lchan->ts->pchan)); |