aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2010-04-19 21:54:35 +0800
committerHolger Hans Peter Freyther <zecke@selfish.org>2010-04-19 22:30:21 +0800
commitcaf24567d134e3e783ca8f271c7cd9b21237ee35 (patch)
tree930e9eddd788945e248255c001d6cc589fc7547e /openbsc
parent1d34c6ac5af41c058ec76ee92c3045feed3fe9af (diff)
BAND AID... Reduce the delay timer, reduce number of paging requests we send
This is a band aid and not a proper fix. Reduce the time between two IPA commands even if it is breaking rugby sized BTSs, limit the paging commands we send during one iteration through the event loop. This should prevent us from killing ourselves in a RACH loop.
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/src/input/ipaccess.c3
-rw-r--r--openbsc/src/paging.c7
2 files changed, 8 insertions, 2 deletions
diff --git a/openbsc/src/input/ipaccess.c b/openbsc/src/input/ipaccess.c
index 8a8a1987d..faa172b38 100644
--- a/openbsc/src/input/ipaccess.c
+++ b/openbsc/src/input/ipaccess.c
@@ -572,7 +572,8 @@ static int handle_ts1_write(struct bsc_fd *bfd)
e1i_ts->sign.tx_timer.data = e1i_ts;
/* Reducing this might break the nanoBTS 900 init. */
- bsc_schedule_timer(&e1i_ts->sign.tx_timer, 0, 100000);
+ /* BAND AID for paging problem */
+ bsc_schedule_timer(&e1i_ts->sign.tx_timer, 0, 100);
return ret;
}
diff --git a/openbsc/src/paging.c b/openbsc/src/paging.c
index a0cdc55ce..07683ad64 100644
--- a/openbsc/src/paging.c
+++ b/openbsc/src/paging.c
@@ -116,6 +116,10 @@ static void paging_handle_pending_requests(struct gsm_bts_paging_state *paging_b
struct gsm_paging_request *initial_request = NULL;
struct gsm_paging_request *current_request = NULL;
+ /* BAND AID to throttle the paging requests we send. Not more than 10. */
+ int req = 0;
+ static const int REQ_LIMIT = 5;
+
/*
* Determine if the pending_requests list is empty and
* return then.
@@ -155,7 +159,8 @@ static void paging_handle_pending_requests(struct gsm_bts_paging_state *paging_b
current_request = llist_entry(paging_bts->pending_requests.next,
struct gsm_paging_request, entry);
} while (paging_bts->available_slots > 0
- && initial_request != current_request);
+ && initial_request != current_request
+ && req++ < REQ_LIMIT);
bsc_schedule_timer(&paging_bts->work_timer, 2, 0);
}