library: fix Repeated Page Info IE in PacketPagingReq

Change-Id: I39e8e3991cc248602460b7f162a0b57c2925315f
Related: OS#4838
This commit is contained in:
Vadim Yanitskiy 2020-10-31 05:46:03 +07:00
parent b20b7e59f9
commit e94164d22e
4 changed files with 28 additions and 9 deletions

View File

@ -416,18 +416,22 @@ module RLCMAC_CSN1_Types {
} with { } with {
variant "TAG(ps, presence = '0'B; cs, presence = '1'B)" variant "TAG(ps, presence = '0'B; cs, presence = '1'B)"
}; };
type record RepeatedPageInfoItem {
BIT1 presence,
PageInfo item
} with { variant "PRESENCE(presence = '1'B)" };
type record of RepeatedPageInfoItem RepeatedPageInfo;
type record PacketPagingReq { type record PacketPagingReq {
PageMode page_mode, PageMode page_mode,
BIT1 persistence_levels_present, BIT1 persistence_levels_present,
PersistenceLevels persistence_levels optional, PersistenceLevels persistence_levels optional,
BIT1 nln_present, BIT1 nln_present,
uint2_t nln optional, uint2_t nln optional,
BIT1 repeated_pageinfo_present, RepeatedPageInfo repeated_pageinfo optional,
PageInfo repeated_pageinfo optional BIT1 repeated_pageinfo_term ('0'B)
} with { } with {
variant (persistence_levels) "PRESENCE(persistence_levels_present = '1'B)" variant (persistence_levels) "PRESENCE(persistence_levels_present = '1'B)"
variant (nln) "PRESENCE(nln_present = '1'B)" variant (nln) "PRESENCE(nln_present = '1'B)"
variant (repeated_pageinfo) "PRESENCE(repeated_pageinfo_present = '1'B)"
}; };
/* 12.26 Extension Bits IE */ /* 12.26 Extension Bits IE */

View File

@ -642,8 +642,8 @@ module RLCMAC_Templates {
persistence_levels := *, persistence_levels := *,
nln_present := ?, nln_present := ?,
nln := *, nln := *,
repeated_pageinfo_present := ?, repeated_pageinfo := *,
repeated_pageinfo := * repeated_pageinfo_term := '0'B
} }
} }
} }

View File

@ -917,11 +917,25 @@ runs on MS_BTS_IFACE_CT return uint32_t {
function f_pkt_paging_match_tmsi(in PacketPagingReq req, template GsmTmsi tmsi) function f_pkt_paging_match_tmsi(in PacketPagingReq req, template GsmTmsi tmsi)
runs on MS_BTS_IFACE_CT { runs on MS_BTS_IFACE_CT {
if (not match(req.repeated_pageinfo.cs.tmsi, tmsi)) { if (not ispresent(req.repeated_pageinfo)) {
setverdict(fail, "Mobile Identity (TMSI/P-TMSI) mismatch: ", setverdict(fail, "Packet Paging Request without MIs?!?");
"expected: ", tmsi, "got: ", req.repeated_pageinfo.cs.tmsi);
f_shutdown(__BFILE__, __LINE__); f_shutdown(__BFILE__, __LINE__);
} }
for (var integer i := 0; i < lengthof(req.repeated_pageinfo); i := i + 1) {
var PageInfo info := req.repeated_pageinfo[i].item;
if (not ischosen(info.cs))
{ continue; }
if (match(info.cs.tmsi, tmsi)) {
setverdict(pass);
return;
}
}
setverdict(fail, "Mobile Identity (TMSI/P-TMSI) ", tmsi,
" is not present in ", req.repeated_pageinfo);
f_shutdown(__BFILE__, __LINE__);
} }
} }

View File

@ -1702,7 +1702,8 @@ testcase TC_ul_tbf_reestablish_with_pkt_resource_req() runs on RAW_PCU_Test_CT {
private function f_pkt_paging_match_imsi(in PacketPagingReq req, hexstring imsi) private function f_pkt_paging_match_imsi(in PacketPagingReq req, hexstring imsi)
runs on RAW_PCU_Test_CT { runs on RAW_PCU_Test_CT {
var MobileIdentityLV_Paging mi_lv := req.repeated_pageinfo.cs.mobile_identity; var PageInfo info := req.repeated_pageinfo[0].item;
var MobileIdentityLV_Paging mi_lv := info.cs.mobile_identity;
var MobileIdentityV mi := dec_MobileIdentityV(mi_lv.mobile_id); 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) */ if (mi_lv.len != 8) { /* 8 octets: type of ID (3 bits) + even/odd flag (1 bit) + 15 BCD-encoded digits (60 bits) */