diff options
author | Stefan Sperling <ssperling@sysmocom.de> | 2018-01-11 17:49:02 +0100 |
---|---|---|
committer | Stefan Sperling <ssperling@sysmocom.de> | 2018-01-16 14:18:21 +0100 |
commit | 95543427f9c5a5769f2cd2e7a9dbddb8fb95496a (patch) | |
tree | 5cdee7219177ca9b3ccb85c4d1781f3e1ad89b78 | |
parent | c7b017658d85cec19b40d12f468edc8dc4562a16 (diff) |
Implement support for paging based on LAC and CI.
This is a simple combination of the LAC and CI cases which have
already been implemented.
The BSC_Tests.TC_paging_imsi_nochan_lac_ci ttcn3 test passes.
The switch statement in bssmap_handle_paging() is getting a bit large,
and scoping of local variables could be improved. I will focus on
cleaning this up later once paging functionality is complete.
Change-Id: If7f596663a97a1db1a00f115a366f4a5a271c127
Depends: Id83f8b3b1ce80a39417176d99fd09f3b394fd19c
Related: OS#2752
-rw-r--r-- | src/osmo-bsc/osmo_bsc_bssap.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/osmo-bsc/osmo_bsc_bssap.c b/src/osmo-bsc/osmo_bsc_bssap.c index 04541c296..189456105 100644 --- a/src/osmo-bsc/osmo_bsc_bssap.c +++ b/src/osmo-bsc/osmo_bsc_bssap.c @@ -395,6 +395,30 @@ static int bssmap_handle_paging(struct bsc_msc_data *msc, } } + case CELL_IDENT_LAC_AND_CI: { + uint16_t ci, *ci_be; + lacp_be = (uint16_t *)(&data[1]); + ci_be = (uint16_t *)(&data[3]); + while (remain >= sizeof(*lacp_be) + sizeof(*ci_be)) { + lac = osmo_load16be(lacp_be); + ci = osmo_load16be(ci_be); + + llist_for_each_entry(bts, &msc->network->bts_list, list) { + if (bts->location_area_code != lac) + continue; + if (bts->cell_identity != ci) + continue; + if (page_subscriber(msc, bts, tmsi, lac, mi_string, chan_needed) < 0) + break; + } + + remain -= sizeof(*lacp_be) + sizeof(*ci_be); + lacp_be++; + ci_be++; + } + break; + } + case CELL_IDENT_CI: { uint16_t *ci_be = (uint16_t *)(&data[1]); while (remain >= sizeof(*ci_be)) { |