question about 'lai & lac' paging

Submitted by Stefan Sperling on Jan. 5, 2018, 5:04 p.m.

Details

Message ID 20180105170458.GA19240@byrne.stsp.name
State New
Series "question about 'lai & lac' paging"
Headers show

Commit Message

Stefan Sperling Jan. 5, 2018, 5:04 p.m.
I am trying to fix issue OS#2754 "Paging on LAI not working".

There are two tests related to this issue:

  1) osmo-bsc/tests/bssap/bssap_test

  2) TC_paging_imsi_nochan_lai in osmo-ttcn3-hacks/bss
 
The first test is successful with my patch below.

But the second test fails. It looks as if the MSC expects a response
which is not delivered. I am unsure if the test has wrong expectations
or if osmo-bsc is not sending a required response?

The test's verdict is:

Test case TC_paging_imsi_nochan_lai finished. Verdict: fail reason:
Timeout expecting { msg_disc := { msg_group := RSL_MDISC_CCHAN (6),
transparent := false }, msg_type := RSL_MT_PAGING_CMD (21), ies := { {
iei := ?, body := { chan_nr := { u := { ch0 := RSL_CHAN_NR_PCH_AGCH (18)
}, tn := ? } } }, { iei := ?, body := { paging_group := ? } }, { iei :=
?, body := { ms_identity := { len := ?, payload := ? } } }, * } }   


Note that the existing ttcn3 test for the LAC case, which is already
supported, and also covered by the bssap_test, fails in the same way:

Test case TC_paging_imsi_nochan_lac finished. Verdict: fail reason:
Timeout expecting { msg_disc := { msg_group := RSL_MDISC_CCHAN (6),
transparent := false }, msg_type := RSL_MT_PAGING_CMD (21), ies := { {
iei := ?, body := { chan_nr := { u := { ch0 := RSL_CHAN_NR_PCH_AGCH (18)
}, tn := ? } } }, { iei := ?, body := { paging_group := ? } }, { iei :=
?, body := { ms_identity := { len := ?, payload := ? } } }, * } }   


Any hints how to proceed?

Thanks,
Stefan


From 01200d452971cd20c8a0304e180c2d11ff399d3f Mon Sep 17 00:00:00 2001
From: Stefan Sperling <ssperling@sysmocom.de>
Date: Fri, 5 Jan 2018 17:22:11 +0100
Subject: [PATCH] Implement support for paging by LAI.

This is very similar to the paging by LAC case. We can simply extract
the LAC at a different offset.

Change-Id: Ic3c62ff0fccea586794ea4b3c275a0685cc9326e
Related: OS#2751
---
 src/osmo-bsc/osmo_bsc_bssap.c | 9 +++++++++
 tests/bssap/bssap_test.c      | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)

Patch hide | download patch | download mbox

diff --git a/src/osmo-bsc/osmo_bsc_bssap.c b/src/osmo-bsc/osmo_bsc_bssap.c
index 45861ccc..9bc59623 100644
--- a/src/osmo-bsc/osmo_bsc_bssap.c
+++ b/src/osmo-bsc/osmo_bsc_bssap.c
@@ -288,6 +288,15 @@  static int bssmap_handle_paging(struct bsc_msc_data *msc,
 	lac = GSM_LAC_RESERVED_ALL_BTS;
 
 	switch (cell_ident) {
+	case CELL_IDENT_LAI_AND_LAC:
+		if (data_length != 6) {
+			LOGP(DMSC, LOGL_ERROR, "Paging IMSI %s: Cell Identifier List for BSS (0x%x)"
+			     " has invalid length: %u, paging entire BSS anyway (%s)\n",
+			     mi_string, CELL_IDENT_BSS, data_length, osmo_hexdump(data, data_length));
+		}
+		lac = osmo_load16be(&data[4]);
+		break;
+
 	case CELL_IDENT_LAC:
 		if (data_length != 3) {
 			LOGP(DMSC, LOGL_ERROR, "Paging IMSI %s: Cell Identifier List for LAC (0x%x)"
diff --git a/tests/bssap/bssap_test.c b/tests/bssap/bssap_test.c
index 579cae23..2fa2b1fe 100644
--- a/tests/bssap/bssap_test.c
+++ b/tests/bssap/bssap_test.c
@@ -71,7 +71,7 @@  struct {
 	{
 		"001952080859512069000743940904010844601a060415f5490065",
 		/*                                         ^^^^^^^^^^^^ Cell Identifier List: LAI */
-		GSM_LAC_RESERVED_ALL_BTS, 0
+		0x65, 0
 	},
 };
 

Comments

Harald Welte Jan. 6, 2018, 10:20 a.m.
Hi Stefan,

On Fri, Jan 05, 2018 at 06:04:59PM +0100, Stefan Sperling wrote:

> I am trying to fix issue OS#2754 "Paging on LAI not working".
> But the second test fails. It looks as if the MSC expects a response
> which is not delivered. I am unsure if the test has wrong expectations
> or if osmo-bsc is not sending a required response?

It's not a "response", but the BSC converts the (single) BSSMAP PAGING
into 0-N (typically 1-N) "RSL PAGING CMD" towards the BTSs.

The TTCN-3 tests always simulate the entire surrounding of the program
in a fixture.  So for the BSC tests, it doesn't just simulate the MSC,
but simulates the MSC and BTSs (and soon also the MGW) to be able to
control all external interfaces.

The cell identifier list included in the BSSMAP paging tells the BSC which
BTSs it should start to page.

The current code (AFAIR)

a) doesn't understand the concept of the list but only looks at the first element?
b) doesn't understand a lot of the different address formats (CGI, CI, ...)

> Test case TC_paging_imsi_nochan_lai finished. Verdict: fail reason:
> Timeout expecting { msg_disc := { msg_group := RSL_MDISC_CCHAN (6),
> transparent := false }, msg_type := RSL_MT_PAGING_CMD (21), ies := { {
> iei := ?, body := { chan_nr := { u := { ch0 := RSL_CHAN_NR_PCH_AGCH (18)
> }, tn := ? } } }, { iei := ?, body := { paging_group := ? } }, { iei :=
> ?, body := { ms_identity := { len := ?, payload := ? } } }, * } }   

This means that one one of the BTSs where we expect the RSL PAGING it didn't arrive.

> Any hints how to proceed?

you can verify the test correctness by monitoring the RSL link and
checking which of the BTSs (if any) get the RSL PAGING CMD and which
not, and whether that reflects the LAC/CI values configured in
osmo-bsc.cfg.

Regarding your patch:  I think it falls quite a bit short.

>  	switch (cell_ident) {
> +	case CELL_IDENT_LAI_AND_LAC:
> +		if (data_length != 6) {
> +			LOGP(DMSC, LOGL_ERROR, "Paging IMSI %s: Cell Identifier List for BSS (0x%x)"
> +			     " has invalid length: %u, paging entire BSS anyway (%s)\n",
> +			     mi_string, CELL_IDENT_BSS, data_length, osmo_hexdump(data, data_length));
> +		}
> +		lac = osmo_load16be(&data[4]);
> +		break;

please don't just use magic numbers like 6 + 4 but actually define
structs or otherwise parse the data.  Also, a LAI includes MCC+MNC, so
you must verify if all parameters match.

Also, as indicated, the existing code does not traverse the cell
identification list yet, does it?
Neels Hofmeyr Jan. 7, 2018, 6:15 p.m.
On Sat, Jan 06, 2018 at 11:20:37AM +0100, Harald Welte wrote:
> please don't just use magic numbers like 6 + 4 but actually define
> structs or otherwise parse the data.  Also, a LAI includes MCC+MNC, so

should probably be using gsm48_decode_lai() in libosmocore/include/osmocom/gsm/gsm48.h

> you must verify if all parameters match.

since we currently have just a single global MCC+MNC setting, being correct
means ignoring paging for mismatching MCC+MNC... I guess we want error log for
that case, since the MSC shouldn't even send us paging for mismatching MCC+MNC?

> Also, as indicated, the existing code does not traverse the cell
> identification list yet, does it?

IIUC receiving a LAI identification for paging is not related to a cell
identification list?

~N