aboutsummaryrefslogtreecommitdiffstats
path: root/src/common/oml.c
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2013-02-05 09:06:49 +0100
committerHarald Welte <laforge@gnumonks.org>2013-03-11 11:47:41 +0100
commit294fd1b650e4482775fdd604288fc928e66ef81c (patch)
tree506a480f0f000d7cea082e104d39cc5873164a5c /src/common/oml.c
parent19f212951af720bc5ad415d8347838f3ac222442 (diff)
Added radio link timeout procedure according to TS 05.08 Chapter 5.2
Chapter 5.2 applies to MS procedure, but 5.3 (BSS procedure) defines no exact criterion, so I decided to use the procedure equivalent to MS. The criterion is based on a counter S, which is initialized to a preset RADIO_LINK_TIMEOUT, which can be configured via VTY. Whenever a received SACCH block is bad, S is counted down by one. If SACCH block is successfully decoded, S is counted up by two, but never above initial RADIO_LINK_TIMEOUT value. If S reaches 0, an RSL Connection Failure Indication with cause RF Radio Link Failure is sent to BSC, which then aborts channel. Use link timeout value from BSC via OML attribute. How to test: - Set "debug" for "meas" logging. - Start silent call to an attached mobile. - Remove battery from mobile or shield mobile. - Watch S count down.
Diffstat (limited to 'src/common/oml.c')
-rw-r--r--src/common/oml.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/common/oml.c b/src/common/oml.c
index 055ef032..4e2deadb 100644
--- a/src/common/oml.c
+++ b/src/common/oml.c
@@ -446,7 +446,14 @@ static int oml_rx_set_bts_attr(struct gsm_bts *bts, struct msgb *msg)
btsb->interference.intave = *TLVP_VAL(&tp, NM_ATT_INTAVE_PARAM);
/* 9.4.14 Connection Failure Criterion */
- /* ... can be 'operator dependent' and needs to be parsed by bts driver */
+ if (TLVP_PRESENT(&tp, NM_ATT_CONN_FAIL_CRIT) &&
+ (TLVP_LEN(&tp, NM_ATT_CONN_FAIL_CRIT) >= 2) &&
+ *TLVP_VAL(&tp, NM_ATT_CONN_FAIL_CRIT) == 0x01) {
+ const uint8_t *val = TLVP_VAL(&tp, NM_ATT_CONN_FAIL_CRIT);
+ btsb->radio_link_timeout = val[1];
+ }
+ /* if val[0] != 0x01: can be 'operator dependent' and needs to
+ * be parsed by bts driver */
/* 9.4.53 T200 */
if (TLVP_PRESENT(&tp, NM_ATT_T200)) {