GPRS_Components: generalize both f_pkt_paging_match_{imsi,tmsi}()
Change-Id: Ie0578fa299cdac18e942350b2e879839c9bd9dba
diff --git a/pcu/GPRS_Components.ttcn b/pcu/GPRS_Components.ttcn
index d6abf6d..7364476 100644
--- a/pcu/GPRS_Components.ttcn
+++ b/pcu/GPRS_Components.ttcn
@@ -934,8 +934,10 @@
return f_rrbp_ack_fn(dl_fn, rrbp);
}
-function f_pkt_paging_match_tmsi(in PacketPagingReq req, template GsmTmsi tmsi)
-runs on MS_BTS_IFACE_CT {
+/* Return true if a given Packet Paging Request contains the given IMSI, false otherwise */
+function f_pkt_paging_match_imsi(in PacketPagingReq req, template hexstring imsi,
+ boolean cs_domain := true, boolean ps_domain := true)
+runs on MS_BTS_IFACE_CT return boolean {
if (not ispresent(req.repeated_pageinfo)) {
setverdict(fail, "Packet Paging Request without MIs?!?");
f_shutdown(__BFILE__, __LINE__);
@@ -943,18 +945,57 @@
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; }
+ var MobileIdentityLV_Paging mi_lv;
- if (match(info.cs.tmsi, tmsi)) {
- setverdict(pass);
- return;
+ if (ischosen(info.cs)) { /* CS domain */
+ if (not ispresent(info.cs.mobile_identity))
+ { continue; }
+ if (not cs_domain)
+ { continue; }
+ mi_lv := info.cs.mobile_identity;
+ } else { /* PS domain */
+ if (not ispresent(info.ps.mobile_identity))
+ { continue; }
+ if (not ps_domain)
+ { continue; }
+ mi_lv := info.ps.mobile_identity;
+ }
+
+ /* Make sure MI contains IMSI before referencing it */
+ if (match(mi_lv.mobile_id, decmatch tr_MI_IMSI(imsi))) {
+ return true;
}
}
- setverdict(fail, "Mobile Identity (TMSI/P-TMSI) ", tmsi,
- " is not present in ", req.repeated_pageinfo);
- f_shutdown(__BFILE__, __LINE__);
+ return false;
+}
+
+/* Return true if a given Packet Paging Request contains the given P-TMSI, false otherwise */
+function f_pkt_paging_match_tmsi(in PacketPagingReq req, template GsmTmsi tmsi,
+ boolean cs_domain := true, boolean ps_domain := true)
+runs on MS_BTS_IFACE_CT return boolean {
+ if (not ispresent(req.repeated_pageinfo)) {
+ setverdict(fail, "Packet Paging Request without MIs?!?");
+ 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 (cs_domain and ischosen(info.cs)) {
+ if (not ispresent(info.cs.tmsi))
+ { continue; }
+ if (match(info.cs.tmsi, tmsi))
+ { return true; }
+ } else if (ps_domain) {
+ if (not ispresent(info.ps.ptmsi))
+ { continue; }
+ if (match(info.ps.ptmsi, tmsi))
+ { return true; }
+ }
+ }
+
+ return false;
}
}