fixeria has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42582?usp=email )
Change subject: bsc: verify Cell ID in BSSMAP HandoverPerformed ......................................................................
bsc: verify Cell ID in BSSMAP HandoverPerformed
As per 3GPP TS 48.008 §3.2.1.25, HANDOVER PERFORMED must report the target cell. Add an optional cell_id parameter to the template (defaulting to '?' for backward compatibility) and update the two intra-BSC handover test helpers to assert that the Cell Identifier IE carries the target BTS (BTS 1: MCC=001 MNC=01 LAC=1 CI=1).
Also remove the unnecessary interleave wrapper in f_tc_ho_during_lcs_loc_req(): the two receives arrive on separate ports (RAN_CONN vs BSSAP_LE) so sequential receive is sufficient.
Change-Id: I82aadcc3a80c183cb93522b829071294b156a218 Related: osmo-bsc.git I4111351dc38fc2dbe844c2bd07b3ecfaaadd864e --- M bsc/BSC_Tests.ttcn M library/BSSMAP_Templates.ttcn 2 files changed, 21 insertions(+), 10 deletions(-)
Approvals: osmith: Looks good to me, but someone else must approve pespin: Looks good to me, approved Jenkins Builder: Verified
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn index e97ecb0..a4c666e 100644 --- a/bsc/BSC_Tests.ttcn +++ b/bsc/BSC_Tests.ttcn @@ -5887,8 +5887,14 @@ }
/* Since this is an internal handover we expect the BSC to inform the - * MSC about the event */ - RAN_CONN.receive(tr_BSSMAP_HandoverPerformed); + * MSC about the event. The Cell Identifier must report the *target* BTS + * (BTS 1: MCC=001 MNC=01 LAC=1 CI=1), not the source BTS. */ + alt { + [] RAN_CONN.receive(tr_BSSMAP_HandoverPerformed(tr_CellId_CGI('00F110'O, 1, 1))); + [] RAN_CONN.receive(tr_BSSMAP_HandoverPerformed) { + setverdict(fail, "BSSMAP HandoverPerformed indicates unexpected Cell ID"); + } + }
/* Check the amount of MGCP transactions is still consistant with the * test expectation */ @@ -10855,17 +10861,21 @@ [] as_handover(hs); }
+ /* Expect the BSC to inform the MSC about the handover. The Cell Identifier + * must report the *target* BTS (BTS 1: MCC=001 MNC=01 LAC=1 CI=1). */ + alt { + [] RAN_CONN.receive(tr_BSSMAP_HandoverPerformed(tr_CellId_CGI('00F110'O, 1, 1))); + [] RAN_CONN.receive(tr_BSSMAP_HandoverPerformed) { + setverdict(fail, "BSSMAP HandoverPerformed indicates unexpected Cell ID"); + } + } + var PDU_BSSAP_LE rx_bsslap;
- interleave { - /* Expect the BSC to inform the MSC about the handover */ - [] RAN_CONN.receive(tr_BSSMAP_HandoverPerformed); - /* Expect the BSC to inform the SMLC about the handover */ - [] BSSAP_LE.receive(tr_BSSMAP_LE_ConnInfo(BSSMAP_LE_PROT_BSSLAP, ?)) -> value(rx_bsslap) { + BSSAP_LE.receive(tr_BSSMAP_LE_ConnInfo(BSSMAP_LE_PROT_BSSLAP, ?)) -> value(rx_bsslap) { f_match_bsslap(rx_bsslap, tr_BSSLAP_Reset(BSSLAP_CAUSE_INTRA_BSS_HO)); } - }
/* SMLC now responds with geo information data. */ BSSAP_LE.send(ts_BSSMAP_LE_PerfLocResp(gad_ell_point_unc_circle, omit)); diff --git a/library/BSSMAP_Templates.ttcn b/library/BSSMAP_Templates.ttcn index 563d6d1..deeabda 100644 --- a/library/BSSMAP_Templates.ttcn +++ b/library/BSSMAP_Templates.ttcn @@ -1331,14 +1331,15 @@ } }
-template PDU_BSSAP tr_BSSMAP_HandoverPerformed +template PDU_BSSAP +tr_BSSMAP_HandoverPerformed(template (present) BSSMAP_IE_CellIdentifier cell_id := ?) modifies tr_BSSAP_BSSMAP := { pdu := { bssmap := { handoverPerformed := { messageType := '17'O, cause := ?, - cellIdentifier := ?, + cellIdentifier := cell_id, chosenChannel := *, chosenEncryptionAlgorithm := *, speechVersion := *,