aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2013-09-17 08:21:43 +0200
committerAndreas Eversberg <jolly@eversberg.eu>2014-01-21 15:54:57 +0100
commit1135c5ae928cf4b78aa72a4d2710b3e8615e3bbf (patch)
tree4348af503874e40f6dc8208d8ed5afc5b21fd589
parente74d202d4d5b9a14f14df0f1f69a0be85f2873ba (diff)
HACK: Limit AGCH queue
-rw-r--r--include/osmo-bts/gsm_data.h1
-rw-r--r--src/common/bts.c10
-rw-r--r--src/osmo-bts-trx/scheduler.c2
3 files changed, 10 insertions, 3 deletions
diff --git a/include/osmo-bts/gsm_data.h b/include/osmo-bts/gsm_data.h
index 42c14401..a5ac9e2c 100644
--- a/include/osmo-bts/gsm_data.h
+++ b/include/osmo-bts/gsm_data.h
@@ -49,6 +49,7 @@ struct gsm_bts_role_bts {
uint8_t ny1;
uint8_t max_ta;
struct llist_head agch_queue;
+ int agch_queue_count;
struct paging_state *paging_state;
char *bsc_oml_host;
unsigned int rtp_jitter_buf_ms;
diff --git a/src/common/bts.c b/src/common/bts.c
index 47339230..08a5e24e 100644
--- a/src/common/bts.c
+++ b/src/common/bts.c
@@ -216,8 +216,11 @@ int bts_agch_enqueue(struct gsm_bts *bts, struct msgb *msg)
{
struct gsm_bts_role_bts *btsb = bts_role_bts(bts);
- /* FIXME: implement max queue length */
+ if (btsb->agch_queue_count >= 30)
+ return -ENOMEM;
+
msgb_enqueue(&btsb->agch_queue, msg);
+ btsb->agch_queue_count++;
return 0;
}
@@ -225,8 +228,11 @@ int bts_agch_enqueue(struct gsm_bts *bts, struct msgb *msg)
struct msgb *bts_agch_dequeue(struct gsm_bts *bts)
{
struct gsm_bts_role_bts *btsb = bts_role_bts(bts);
+ struct msgb *msg = msgb_dequeue(&btsb->agch_queue);
- return msgb_dequeue(&btsb->agch_queue);
+ if (msg)
+ btsb->agch_queue_count--;
+ return msg;
}
int bts_supports_cipher(struct gsm_bts_role_bts *bts, int rsl_cipher)
diff --git a/src/osmo-bts-trx/scheduler.c b/src/osmo-bts-trx/scheduler.c
index f4b0d9cc..4163322c 100644
--- a/src/osmo-bts-trx/scheduler.c
+++ b/src/osmo-bts-trx/scheduler.c
@@ -1189,7 +1189,7 @@ static int rx_rach_fn(struct trx_l1h *l1h, uint8_t tn, uint32_t fn,
if (rc) {
LOGP(DL1C, LOGL_NOTICE, "Received bad AB frame at fn=%u "
"(%u/51)\n", fn, fn % 51);
- return 0;
+// return 0;
}
/* compose primitive */