diff options
Diffstat (limited to 'doc/channel_release.txt')
-rw-r--r-- | doc/channel_release.txt | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/doc/channel_release.txt b/doc/channel_release.txt new file mode 100644 index 000000000..c9cdfebca --- /dev/null +++ b/doc/channel_release.txt @@ -0,0 +1,95 @@ + +GSM 04.08 7.1.7 / 9.1.7 RR CHANNEL RELESE + +RSL 08.58 3.4 / ? RLL Link Release Request + +RSL 08.58 4.6 / 8.4.5 DEACTivate SACCH + * Deactivate SACCH according to Channel Release Proc 04.08 + * to be sent after RR CHANNEL RELEASE is sent to MS + +RSL 08.58 4.7 / 8.4.14 RF CHANnel RELease + * tells the BTS to release a radio channel + * "when an activated radio channel is no longer needed" + * BTS responds with RF CHANnel RELease ACKnowledge + + +GSM 04.08 3.4.13: RR connection release procedure + +* network sends RR CHANNEL RELEASE to MS on the DCCH + * start T3109 + * deactivate SACCH +* MS disconnects main signalling link (by sending DISC) + * all other data links are disconnected by local end link release +* network receives DISC (BTS sends RLL REL IND to BSC) + * stop T3109 + * start T3111 +* when T3111 times out, the network can reuse the channls +* if T3109 times out, the network deactivates the channels + and can reuse them + * this probably means simply RF CHANnel RELease + + +== Implementation in OpenBSC == + +There are two possible reasons a gsm_subscriber_connection +will be released. One is a network failure, the other is +the completion of an operation/transaction. + +=== Failure === +The BSC API will call the gsm_04_08.c:gsm0408_clear_request callback +and the MSC part will release all transactions, operations and such +and the channels will be released as error case. + +=== Success === +Every time an 'operation' or 'transaction' is finished msc_release_connection +will be called and it will determine if the gsm_subscriber_connection can +be released. + +In case it can be released bsc_api.c:gsm0808_clear will be called +which will release all lchan's associated with the connection. For the +primary channel a SACH Deactivate will be send with the release +reason NORMAL RELEASE. + + +bsc_api.c:gsm0808_clear + * Release a channel used for handover + * Release the primary lchan with normal release, SACH deactivate + +chan_alloc.c:lchan_release(chan, sacch_deactivate, reason) + * Start the release procedure. It is working in steps with callbacks + coming from the abis_rsl.c code. + * Release all SAPI's > 0 as local end (The BTS should send a + REL_CONF a message) + * Send SACH Deactivate on SAPI=0 if required. + * Start T3109 (stop it when the main signalling link is disconnected) + or when the channel released. On timeout start the error handling. + * abis_rsl.c schedules the RSL_MT_RF_CHAN_REL once all SAPI's are + released and after T3111 has timed out or there is an error. + +RX of RELease INDication: + * Calls internal rsl_handle_release which might release the RF. + +RX of RELease CONFirmation: + * Calls internal rsl_handle_release which might release the RF. + +* RX of RF_CHAN_REL_ACK + * call lchan_free() + + +=== Integration with SMS === + +* RX of CP_ERROR or unimplemented MT + * trigger trans_free() which will msc_release_connection() + +* CP TC1* expired while waiting for CP-ACK + * trigger trans_free() which will msc_release_connection() + +* RX of RP_ERROR + * trigger trans_free() which will msc_release_connection() + +* TX of CP-ACK in MT DELIVER + * trigger trans_free() which will msc_release_connection() + +* RX of CP-ACK in MO SUBMIT + * trigger trans_free() which will msc_release_connection() + |