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
This commit is contained in:
Stefan Sperling 2018-01-11 17:49:02 +01:00
parent c7b017658d
commit 95543427f9
1 changed files with 24 additions and 0 deletions

View File

@ -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)) {