aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src
diff options
context:
space:
mode:
authorSylvain Munaut <tnt@246tNt.com>2010-01-02 20:28:14 +0100
committerSylvain Munaut <tnt@246tNt.com>2010-01-07 10:49:52 +0100
commit1e7550ac28de989fadeb0827d056e899b3aacb66 (patch)
treef098899c6a4033bea5d96c1ba17b86fd296226f3 /openbsc/src
parent4d40db980f8df23bf8517c3a6da7a6da34963c6d (diff)
paging: Add paging_request_pause to disable without deleting page req
This disables the send of paging request on the air but doesn't do anything else. Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Diffstat (limited to 'openbsc/src')
-rw-r--r--openbsc/src/paging.c37
1 files changed, 35 insertions, 2 deletions
diff --git a/openbsc/src/paging.c b/openbsc/src/paging.c
index 91de70241..2cbb7d8da 100644
--- a/openbsc/src/paging.c
+++ b/openbsc/src/paging.c
@@ -143,8 +143,10 @@ static void paging_handle_pending_requests(struct gsm_bts_paging_state *paging_b
do {
/* handle the paging request now */
- page_ms(current_request);
- paging_bts->available_slots--;
+ if (!current_request->paused) {
+ page_ms(current_request);
+ paging_bts->available_slots--;
+ }
/*
* move to the next item. We might wrap around
@@ -285,6 +287,37 @@ int paging_request(struct gsm_network *network, struct gsm_subscriber *subscr,
}
+static void _paging_request_pause(struct gsm_bts *bts,
+ struct gsm_subscriber *subscr)
+{
+ struct gsm_bts_paging_state *bts_entry = &bts->paging;
+ struct gsm_paging_request *req, *req2;
+
+ llist_for_each_entry_safe(req, req2, &bts_entry->pending_requests,
+ entry) {
+ if (req->subscr == subscr) {
+ DEBUGP(DPAG, "Paused paging on bts %d.\n", bts->nr);
+ req->paused = 1;
+ break;
+ }
+ }
+}
+
+void paging_request_pause(struct gsm_bts *_bts, struct gsm_subscriber *subscr)
+{
+ struct gsm_bts *bts = NULL;
+ u_int16_t lac = _bts ? _bts->location_area_code : subscr->lac;
+
+ do {
+ bts = gsm_bts_by_lac(subscr->net, lac, bts);
+ if (!bts)
+ break;
+ _paging_request_pause(bts, subscr);
+ } while (1);
+
+}
+
+
/* we consciously ignore the type of the request here */
static void _paging_request_stop(struct gsm_bts *bts, struct gsm_subscriber *subscr,
struct gsm_lchan *lchan)