diff options
author | Sylvain Munaut <tnt@246tNt.com> | 2010-01-02 20:28:14 +0100 |
---|---|---|
committer | Sylvain Munaut <tnt@246tNt.com> | 2010-01-07 10:49:52 +0100 |
commit | 1e7550ac28de989fadeb0827d056e899b3aacb66 (patch) | |
tree | f098899c6a4033bea5d96c1ba17b86fd296226f3 /openbsc/src | |
parent | 4d40db980f8df23bf8517c3a6da7a6da34963c6d (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.c | 37 |
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) |