From 322c79367b5d38e43c15c3238b18b5f24b9191ee Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Wed, 1 Jan 2020 23:03:47 +0100 Subject: [PATCH] PCU: fix: actually match IMSI in Packet Paging Request Change-Id: I0afdd53fd5d2a89e139f65a7aec412a2e12511cc --- library/L3_Templates.ttcn | 3 +++ library/RLCMAC_CSN1_Types.ttcn | 5 ++++- pcu/PCU_Tests_RAW.ttcn | 38 +++++++++++++++++++++++++--------- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn index 0556c9723..6b5f5c23e 100644 --- a/library/L3_Templates.ttcn +++ b/library/L3_Templates.ttcn @@ -2833,6 +2833,9 @@ function f_gen_msisdn(integer suffix) return hexstring { external function enc_MobileIdentityLV(in MobileIdentityLV si) return octetstring with { extension "prototype(convert) encode(RAW)" }; +external function dec_MobileIdentityV(in octetstring mi) return MobileIdentityV + with { extension "prototype(convert) decode(RAW)" }; + /* SMS TPDU Layer */ diff --git a/library/RLCMAC_CSN1_Types.ttcn b/library/RLCMAC_CSN1_Types.ttcn index 321049c05..1bb623296 100644 --- a/library/RLCMAC_CSN1_Types.ttcn +++ b/library/RLCMAC_CSN1_Types.ttcn @@ -204,7 +204,10 @@ module RLCMAC_CSN1_Types { * uses a byte. */ uint4_t len, octetstring mobile_id - } with { variant (len) "LENGTHTO(mobile_id)" }; + } with { + variant (len) "LENGTHTO(mobile_id)" + variant (mobile_id) "BYTEORDER(first)" + }; type record PageInfoPs { BIT1 presence ('0'B), BIT1 ptmsi_or_mobile_id, diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn index cd13ff5f5..d0181a9e1 100644 --- a/pcu/PCU_Tests_RAW.ttcn +++ b/pcu/PCU_Tests_RAW.ttcn @@ -1247,6 +1247,28 @@ testcase TC_imm_ass_dl_block_retrans() runs on RAW_PCU_Test_CT { f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(dl_block.data.mac_hdr.hdr_ext.tfi, ack_nack_desc), 0, sched_fn); } +private function f_pkt_paging_match_imsi(in PacketPagingReq req, hexstring imsi) { + var MobileIdentityLV_Paging mi_lv := req.repeated_pageinfo.cs.mobile_identity; + var MobileIdentityV mi := dec_MobileIdentityV(mi_lv.mobile_id); + + if (mi_lv.len != 8) { /* 8 octets: type of ID (3 bits) + even/odd flag (1 bit) + 15 BCD-encoded digits (60 bits) */ + setverdict(fail, "Mobile Identity length mismatch: ", + "expected: 8, got: ", mi_lv.len); + mtc.stop; + } + + /* Make sure MI contains IMSI before referencing it */ + if (mi.typeOfIdentity != '001'B) { + setverdict(fail, "Mobile Identity must be of type IMSI ('001'B), ", + "got: ", mi.typeOfIdentity); + mtc.stop; + } else if (mi.oddEvenInd_identity.imsi.digits != imsi) { + setverdict(fail, "Mobile Identity contains unexpected IMSI, ", + "expected: ", imsi, " got: ", mi.oddEvenInd_identity.imsi.digits); + mtc.stop; + } +} + /* Test CS paging over the BTS<->PCU socket. * When a (class B or C, not A) MS has an active TBF (or is on the PDCH), the MS can not react on CS paging over CCCH. * Paging should be send on the PACCH. @@ -1263,7 +1285,6 @@ testcase TC_paging_cs_from_bts() runs on RAW_PCU_Test_CT { var OCT4 tlli := '00000001'O; var MobileL3_CommonIE_Types.MobileIdentityLV mi; var octetstring mi_enc_lv; - var MobileIdentityLV_Paging mi_res; var hexstring imsi := f_gen_imsi(42); /* Initialize NS/BSSGP side */ @@ -1300,12 +1321,9 @@ testcase TC_paging_cs_from_bts() runs on RAW_PCU_Test_CT { /* Receive it on BTS side towards MS */ f_rx_rlcmac_dl_block_exp_pkt_pag_req(dl_block); - mi_res := dl_block.ctrl.payload.u.paging.repeated_pageinfo.cs.mobile_identity; - if (oct2int(substr(mi_enc_lv, 0, 1)) != mi_res.len) { - /* TODO: Verify MI contents encoded match */ - setverdict(fail, "Mobile Identity not matching (imsi=", imsi, ")"); - mtc.stop; - } + /* Make sure that Packet Paging Request contains the same IMSI */ + f_pkt_paging_match_imsi(dl_block.ctrl.payload.u.paging, imsi); + setverdict(pass); } @@ -1317,7 +1335,6 @@ private function f_tc_paging_cs_from_sgsn(Nsvci bvci) runs on RAW_PCU_Test_CT { var RlcmacDlBlock dl_block; var boolean ok; var OCT4 tlli := '00000001'O; - var MobileIdentityLV_Paging mi_res; var hexstring imsi := f_gen_imsi(42); /* Initialize NS/BSSGP side */ @@ -1349,8 +1366,9 @@ private function f_tc_paging_cs_from_sgsn(Nsvci bvci) runs on RAW_PCU_Test_CT { /* Receive it on BTS side towards MS */ f_rx_rlcmac_dl_block_exp_pkt_pag_req(dl_block); - /* FIXME: actually match the identity */ - mi_res := dl_block.ctrl.payload.u.paging.repeated_pageinfo.cs.mobile_identity; + /* Make sure that Packet Paging Request contains the same IMSI */ + f_pkt_paging_match_imsi(dl_block.ctrl.payload.u.paging, imsi); + setverdict(pass); }