aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Sperling <ssperling@sysmocom.de>2018-01-11 17:49:02 +0100
committerStefan Sperling <ssperling@sysmocom.de>2018-01-16 14:18:21 +0100
commit95543427f9c5a5769f2cd2e7a9dbddb8fb95496a (patch)
tree5cdee7219177ca9b3ccb85c4d1781f3e1ad89b78
parentc7b017658d85cec19b40d12f468edc8dc4562a16 (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.c24
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)) {