PCU: fix: actually match IMSI in Packet Paging Request
Change-Id: I0afdd53fd5d2a89e139f65a7aec412a2e12511cc
This commit is contained in:
parent
5e51873d9c
commit
322c79367b
|
@ -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 */
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue