aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2011-06-26 14:43:46 +0200
committerHarald Welte <laforge@gnumonks.org>2011-06-26 14:43:46 +0200
commit1cf43ece122c8f004335661a2de7e43c23c9720a (patch)
tree55a6845395c35afd97c29f66a5be6b21c3456084
parentbc82f92a8d8e214b42525f40c081d482a1a6a961 (diff)
generalize function for calculation of the paging group
-rw-r--r--openbsc/src/libbsc/paging.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/openbsc/src/libbsc/paging.c b/openbsc/src/libbsc/paging.c
index 371a7a673..55d1a8541 100644
--- a/openbsc/src/libbsc/paging.c
+++ b/openbsc/src/libbsc/paging.c
@@ -54,19 +54,20 @@ void *tall_paging_ctx;
#define PAGING_TIMER 0, 500000
-static unsigned int calculate_group(struct gsm_bts *bts, struct gsm_subscriber *subscr)
+static unsigned int
+gsm0502_calc_paging_group(struct gsm48_control_channel_descr *chan_desc, uint64_t imsi)
{
int ccch_conf;
int bs_cc_chans;
int blocks;
unsigned int group;
- ccch_conf = bts->si_common.chan_desc.ccch_conf;
+ ccch_conf = chan_desc->ccch_conf;
bs_cc_chans = rsl_ccch_conf_to_bs_cc_chans(ccch_conf);
/* code word + 2, as 2 channels equals 0x0 */
- blocks = gsm48_number_of_paging_subchannels(&bts->si_common.chan_desc);
- group = gsm0502_get_paging_group(str_to_imsi(subscr->imsi),
- bs_cc_chans, blocks);
+ blocks = gsm48_number_of_paging_subchannels(chan_desc);
+ group = gsm0502_get_paging_group(imsi, bs_cc_chans, blocks);
+
return group;
}
@@ -87,6 +88,7 @@ static void page_ms(struct gsm_paging_request *request)
uint8_t mi[128];
unsigned int mi_len;
unsigned int page_group;
+ struct gsm_bts *bts = request->bts;
LOGP(DPAG, LOGL_INFO, "Going to send paging commands: imsi: '%s' tmsi: '0x%x'\n",
request->subscr->imsi, request->subscr->tmsi);
@@ -96,8 +98,9 @@ static void page_ms(struct gsm_paging_request *request)
else
mi_len = gsm48_generate_mid_from_tmsi(mi, request->subscr->tmsi);
- page_group = calculate_group(request->bts, request->subscr);
- gsm0808_page(request->bts, page_group, mi_len, mi, request->chan_type);
+ page_group = gsm0502_calc_paging_group(&bts->si_common.chan_desc,
+ str_to_imsi(request->subscr->imsi));
+ gsm0808_page(bts, page_group, mi_len, mi, request->chan_type);
}
static void paging_schedule_if_needed(struct gsm_bts_paging_state *paging_bts)