From 95543427f9c5a5769f2cd2e7a9dbddb8fb95496a Mon Sep 17 00:00:00 2001 From: Stefan Sperling Date: Thu, 11 Jan 2018 17:49:02 +0100 Subject: [PATCH] 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 --- src/osmo-bsc/osmo_bsc_bssap.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) 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)) {