gbproxy: Add paging for all situations of unknown identity

CS-PAGING and PS-PAGING for unknown RAC, LAC and BVCI on either PTP or SIG BVC.

Change-Id: I9874d54939daa28201b82139c9d8e3022432e621
This commit is contained in:
Harald Welte 2020-11-23 22:07:07 +01:00
parent 00c0bbf272
commit 7462a59ed9
1 changed files with 299 additions and 0 deletions

View File

@ -1038,6 +1038,34 @@ runs on BSSGP_ConnHdlr {
}
}
/* send a PS-PAGING but don't expect it to show up on any PTP or SIG BVC */
private function f_send_paging_ps_exp_no_bss(template (value) Paging_Field4 p4, integer sgsn_idx := 0,
boolean use_sig := false)
runs on BSSGP_ConnHdlr {
var template (present) PDU_BSSGP exp_rx;
exp_rx := f_send_paging_ps(p4, sgsn_idx, use_sig);
/* Expect paging to propagate to no BSS */
timer T := 2.0;
T.start;
alt {
[] any from PCU.receive(exp_rx) {
setverdict(fail, "Paging received on unexpected BVC");
}
[] any from PCU_SIG.receive(exp_rx) {
setverdict(fail, "Paging received on unexpected BVC");
}
[] any from PCU.receive(PDU_BSSGP:{pDU_BSSGP_PAGING_PS:=?}) {
setverdict(fail, "Different Paging received on PTP BVC");
}
[] any from PCU_SIG.receive(PDU_BSSGP:{pDU_BSSGP_PAGING_PS:=?}) {
setverdict(fail, "Different Paging received on SIGNALING BVC");
}
[] T.timeout {
setverdict(pass);
}
}
}
private function f_TC_paging_ps_ptp_bss(charstring id) runs on BSSGP_ConnHdlr
{
/* doesn't really make sense: Sending to a single BVCI means the message ends up
@ -1072,6 +1100,26 @@ testcase TC_paging_ps_ptp_lac() runs on test_CT {
f_cleanup();
}
/* PS-PAGING on PTP-BVC for unknown Location Area */
private function f_TC_paging_ps_ptp_lac_unknown(charstring id) runs on BSSGP_ConnHdlr
{
var GSM_Types.LocationAreaIdentification unknown_la := {
mcc_mnc := '567F99'H,
lac := 33333
};
/* as it's sent on the PTP BVC, we expect it to pass even for unknown LAC */
f_send_paging_ps_exp_one_bss(ts_BssgpP4LAC(unknown_la), 0, false, 0);
}
testcase TC_paging_ps_ptp_lac_unknown() runs on test_CT {
var BSSGP_ConnHdlr vc_conn;
f_init();
vc_conn := f_start_handler(refers(f_TC_paging_ps_ptp_lac_unknown), testcasename(), g_pcu, g_sgsn, 11);
vc_conn.done;
f_cleanup();
}
/* PS-PAGING on PTP-BVC for Routeing Area */
private function f_TC_paging_ps_ptp_rac(charstring id) runs on BSSGP_ConnHdlr
{
@ -1089,6 +1137,29 @@ testcase TC_paging_ps_ptp_rac() runs on test_CT {
f_cleanup();
}
/* PS-PAGING on PTP-BVC for unknown Routeing Area */
private function f_TC_paging_ps_ptp_rac_unknown(charstring id) runs on BSSGP_ConnHdlr
{
var RoutingAreaIdentification unknown_ra := {
lai := {
mcc_mnc := '567F99'H,
lac := 33333
},
rac := 254
};
/* as it's sent on the PTP BVC, we expect it to pass even for unknown RAC */
f_send_paging_ps_exp_one_bss(ts_BssgpP4RAC(unknown_ra), 0, false, 0);
}
testcase TC_paging_ps_ptp_rac_unknown() runs on test_CT {
var BSSGP_ConnHdlr vc_conn;
f_init();
vc_conn := f_start_handler(refers(f_TC_paging_ps_ptp_rac_unknown), testcasename(), g_pcu, g_sgsn, 11);
vc_conn.done;
f_cleanup();
}
/* PS-PAGING on PTP-BVC for BVCI (one cell) */
private function f_TC_paging_ps_ptp_bvci(charstring id) runs on BSSGP_ConnHdlr
{
@ -1105,6 +1176,22 @@ testcase TC_paging_ps_ptp_bvci() runs on test_CT {
f_cleanup();
}
/* PS-PAGING on PTP-BVC for unknown BVCI */
private function f_TC_paging_ps_ptp_bvci_unknown(charstring id) runs on BSSGP_ConnHdlr
{
/* as it's sent on the PTP BVC, we expect it to pass even for unknown BVCI */
f_send_paging_ps_exp_one_bss(ts_BssgpP4Bvci(33333), 0, false, 0);
}
testcase TC_paging_ps_ptp_bvci_unknown() runs on test_CT {
var BSSGP_ConnHdlr vc_conn;
f_init();
vc_conn := f_start_handler(refers(f_TC_paging_ps_ptp_bvci_unknown), testcasename(), g_pcu, g_sgsn, 11);
vc_conn.done;
f_cleanup();
}
/* altstep for expecting BSSGP PDU on signaling BVC of given pcu_idx + storing in 'roi' */
private altstep as_paging_sig_pcu(integer pcu_idx, template (present) PDU_BSSGP exp_rx, inout ro_integer roi)
runs on BSSGP_ConnHdlr {
@ -1192,6 +1279,25 @@ testcase TC_paging_ps_sig_lac() runs on test_CT {
f_cleanup();
}
/* PS-PAGING on SIG-BVC for unknown Location Area */
private function f_TC_paging_ps_sig_lac_unknown(charstring id) runs on BSSGP_ConnHdlr
{
var GSM_Types.LocationAreaIdentification unknown_la := {
mcc_mnc := '567F99'H,
lac := 33333
};
f_send_paging_ps_exp_no_bss(ts_BssgpP4LAC(unknown_la), 0, true);
}
testcase TC_paging_ps_sig_lac_unknown() runs on test_CT {
var BSSGP_ConnHdlr vc_conn;
f_init();
vc_conn := f_start_handler(refers(f_TC_paging_ps_sig_lac_unknown), testcasename(), g_pcu, g_sgsn, 11);
vc_conn.done;
f_cleanup();
}
/* PS-PAGING on SIG-BVC for Routeing Area */
private function f_TC_paging_ps_sig_rac(charstring id) runs on BSSGP_ConnHdlr
{
@ -1208,6 +1314,28 @@ testcase TC_paging_ps_sig_rac() runs on test_CT {
f_cleanup();
}
/* PS-PAGING on SIG-BVC for unknown Routeing Area */
private function f_TC_paging_ps_sig_rac_unknown(charstring id) runs on BSSGP_ConnHdlr
{
var RoutingAreaIdentification unknown_ra := {
lai := {
mcc_mnc := '567F99'H,
lac := 33333
},
rac := 254
};
f_send_paging_ps_exp_no_bss(ts_BssgpP4RAC(unknown_ra), 0, true);
}
testcase TC_paging_ps_sig_rac_unknown() runs on test_CT {
var BSSGP_ConnHdlr vc_conn;
f_init();
vc_conn := f_start_handler(refers(f_TC_paging_ps_sig_rac_unknown), testcasename(), g_pcu, g_sgsn, 11);
vc_conn.done;
f_cleanup();
}
/* PS-PAGING on SIG-BVC for BVCI (one cell) */
private function f_TC_paging_ps_sig_bvci(charstring id) runs on BSSGP_ConnHdlr
{
@ -1223,6 +1351,22 @@ testcase TC_paging_ps_sig_bvci() runs on test_CT {
f_cleanup();
}
/* PS-PAGING on SIG-BVC for unknown BVCI */
private function f_TC_paging_ps_sig_bvci_unknown(charstring id) runs on BSSGP_ConnHdlr
{
f_send_paging_ps_exp_no_bss(ts_BssgpP4Bvci(33333), 0, true);
}
testcase TC_paging_ps_sig_bvci_unknown() runs on test_CT {
var BSSGP_ConnHdlr vc_conn;
f_init();
vc_conn := f_start_handler(refers(f_TC_paging_ps_sig_bvci_unknown), testcasename(), g_pcu, g_sgsn, 11);
vc_conn.done;
f_cleanup();
}
/***********************************************************************
* PAGING CS procedure
@ -1297,6 +1441,34 @@ runs on BSSGP_ConnHdlr {
}
}
/* send a CS-PAGING but don't expect it to show up on any PTP or SIG BVC */
private function f_send_paging_cs_exp_no_bss(template (value) Paging_Field4 p4, integer sgsn_idx := 0,
boolean use_sig := false)
runs on BSSGP_ConnHdlr {
var template (present) PDU_BSSGP exp_rx;
exp_rx := f_send_paging_cs(p4, sgsn_idx, use_sig);
/* Expect paging to propagate to no BSS */
timer T := 2.0;
T.start;
alt {
[] any from PCU.receive(exp_rx) {
setverdict(fail, "Paging received on unexpected BVC");
}
[] any from PCU_SIG.receive(exp_rx) {
setverdict(fail, "Paging received on unexpected BVC");
}
[] any from PCU.receive(PDU_BSSGP:{pDU_BSSGP_PAGING_CS:=?}) {
setverdict(fail, "Different Paging received on PTP BVC");
}
[] any from PCU_SIG.receive(PDU_BSSGP:{pDU_BSSGP_PAGING_CS:=?}) {
setverdict(fail, "Different Paging received on SIGNALING BVC");
}
[] T.timeout {
setverdict(pass);
}
}
}
private function f_TC_paging_cs_ptp_bss(charstring id) runs on BSSGP_ConnHdlr
{
/* doesn't really make sense: Sending to a single BVCI means the message ends up
@ -1331,6 +1503,26 @@ testcase TC_paging_cs_ptp_lac() runs on test_CT {
f_cleanup();
}
/* CS-PAGING on PTP-BVC for unknown Location Area */
private function f_TC_paging_cs_ptp_lac_unknown(charstring id) runs on BSSGP_ConnHdlr
{
var GSM_Types.LocationAreaIdentification unknown_la := {
mcc_mnc := '567F99'H,
lac := 33333
};
/* as it's sent on the PTP BVC, we expect it to pass even for unknown LAC */
f_send_paging_cs_exp_one_bss(ts_BssgpP4LAC(unknown_la), 0, false, 0);
}
testcase TC_paging_cs_ptp_lac_unknown() runs on test_CT {
var BSSGP_ConnHdlr vc_conn;
f_init();
vc_conn := f_start_handler(refers(f_TC_paging_cs_ptp_lac_unknown), testcasename(), g_pcu, g_sgsn, 11);
vc_conn.done;
f_cleanup();
}
/* CS-PAGING on PTP-BVC for Routeing Area */
private function f_TC_paging_cs_ptp_rac(charstring id) runs on BSSGP_ConnHdlr
{
@ -1348,6 +1540,29 @@ testcase TC_paging_cs_ptp_rac() runs on test_CT {
f_cleanup();
}
/* CS-PAGING on PTP-BVC for unknown Routeing Area */
private function f_TC_paging_cs_ptp_rac_unknown(charstring id) runs on BSSGP_ConnHdlr
{
var RoutingAreaIdentification unknown_ra := {
lai := {
mcc_mnc := '567F99'H,
lac := 33333
},
rac := 254
};
/* as it's sent on the PTP BVC, we expect it to pass even for unknown RAC */
f_send_paging_cs_exp_one_bss(ts_BssgpP4RAC(unknown_ra), 0, false, 0);
}
testcase TC_paging_cs_ptp_rac_unknown() runs on test_CT {
var BSSGP_ConnHdlr vc_conn;
f_init();
vc_conn := f_start_handler(refers(f_TC_paging_cs_ptp_rac_unknown), testcasename(), g_pcu, g_sgsn, 11);
vc_conn.done;
f_cleanup();
}
/* CS-PAGING on PTP-BVC for BVCI (one cell) */
private function f_TC_paging_cs_ptp_bvci(charstring id) runs on BSSGP_ConnHdlr
{
@ -1364,6 +1579,22 @@ testcase TC_paging_cs_ptp_bvci() runs on test_CT {
f_cleanup();
}
/* CS-PAGING on PTP-BVC for unknown BVCI */
private function f_TC_paging_cs_ptp_bvci_unknown(charstring id) runs on BSSGP_ConnHdlr
{
/* as it's sent on the PTP BVC, we expect it to pass even for unknown BVCI */
f_send_paging_cs_exp_one_bss(ts_BssgpP4Bvci(33333), 0, false, 0);
}
testcase TC_paging_cs_ptp_bvci_unknown() runs on test_CT {
var BSSGP_ConnHdlr vc_conn;
f_init();
vc_conn := f_start_handler(refers(f_TC_paging_cs_ptp_bvci_unknown), testcasename(), g_pcu, g_sgsn, 11);
vc_conn.done;
f_cleanup();
}
/* send CS-PAGING on SIG BVC, expect it to arrive on given list of PCU indexes */
private function f_send_paging_cs_exp_multi(template (value) Paging_Field4 p4, integer sgsn_idx := 0,
ro_integer exp_on_pcu_idx) runs on BSSGP_ConnHdlr
@ -1428,6 +1659,25 @@ testcase TC_paging_cs_sig_lac() runs on test_CT {
f_cleanup();
}
/* CS-PAGING on SIG-BVC for unknown Location Area */
private function f_TC_paging_cs_sig_lac_unknown(charstring id) runs on BSSGP_ConnHdlr
{
var GSM_Types.LocationAreaIdentification unknown_la := {
mcc_mnc := '567F99'H,
lac := 33333
};
f_send_paging_cs_exp_no_bss(ts_BssgpP4LAC(unknown_la), 0, true);
}
testcase TC_paging_cs_sig_lac_unknown() runs on test_CT {
var BSSGP_ConnHdlr vc_conn;
f_init();
vc_conn := f_start_handler(refers(f_TC_paging_cs_sig_lac_unknown), testcasename(), g_pcu, g_sgsn, 11);
vc_conn.done;
f_cleanup();
}
/* CS-PAGING on SIG-BVC for Routeing Area */
private function f_TC_paging_cs_sig_rac(charstring id) runs on BSSGP_ConnHdlr
{
@ -1444,6 +1694,28 @@ testcase TC_paging_cs_sig_rac() runs on test_CT {
f_cleanup();
}
/* CS-PAGING on SIG-BVC for unknown Routeing Area */
private function f_TC_paging_cs_sig_rac_unknown(charstring id) runs on BSSGP_ConnHdlr
{
var RoutingAreaIdentification unknown_ra := {
lai := {
mcc_mnc := '567F99'H,
lac := 33333
},
rac := 254
};
f_send_paging_cs_exp_no_bss(ts_BssgpP4RAC(unknown_ra), 0, true);
}
testcase TC_paging_cs_sig_rac_unknown() runs on test_CT {
var BSSGP_ConnHdlr vc_conn;
f_init();
vc_conn := f_start_handler(refers(f_TC_paging_cs_sig_rac_unknown), testcasename(), g_pcu, g_sgsn, 11);
vc_conn.done;
f_cleanup();
}
/* CS-PAGING on SIG-BVC for BVCI (one cell) */
private function f_TC_paging_cs_sig_bvci(charstring id) runs on BSSGP_ConnHdlr
{
@ -1459,6 +1731,21 @@ testcase TC_paging_cs_sig_bvci() runs on test_CT {
f_cleanup();
}
/* CS-PAGING on SIG-BVC for unknown BVCI */
private function f_TC_paging_cs_sig_bvci_unknown(charstring id) runs on BSSGP_ConnHdlr
{
f_send_paging_cs_exp_no_bss(ts_BssgpP4Bvci(33333), 0, true);
}
testcase TC_paging_cs_sig_bvci_unknown() runs on test_CT {
var BSSGP_ConnHdlr vc_conn;
f_init();
vc_conn := f_start_handler(refers(f_TC_paging_cs_sig_bvci_unknown), testcasename(), g_pcu, g_sgsn, 11);
vc_conn.done;
f_cleanup();
}
private function f_TC_flush_ll(charstring id) runs on BSSGP_ConnHdlr {
var BssgpBvci bvci := g_pars.pcu[0].cfg.bvc[0].bvci;
var integer i;
@ -1506,26 +1793,38 @@ control {
/* PAGING-PS over PTP BVC */
execute( TC_paging_ps_ptp_bss() );
execute( TC_paging_ps_ptp_lac() );
execute( TC_paging_ps_ptp_lac_unknown() );
execute( TC_paging_ps_ptp_rac() );
execute( TC_paging_ps_ptp_rac_unknown() );
execute( TC_paging_ps_ptp_bvci() );
execute( TC_paging_ps_ptp_bvci_unknown() );
/* PAGING-PS over SIG BVC */
execute( TC_paging_ps_sig_bss() );
execute( TC_paging_ps_sig_lac() );
execute( TC_paging_ps_sig_lac_unknown() );
execute( TC_paging_ps_sig_rac() );
execute( TC_paging_ps_sig_rac_unknown() );
execute( TC_paging_ps_sig_bvci() );
execute( TC_paging_ps_sig_bvci_unknown() );
/* PAGING-CS over PTP BVC */
execute( TC_paging_cs_ptp_bss() );
execute( TC_paging_cs_ptp_lac() );
execute( TC_paging_cs_ptp_lac_unknown() );
execute( TC_paging_cs_ptp_rac() );
execute( TC_paging_cs_ptp_rac_unknown() );
execute( TC_paging_cs_ptp_bvci() );
execute( TC_paging_cs_ptp_bvci_unknown() );
/* PAGING-CS over SIG BVC */
execute( TC_paging_cs_sig_bss() );
execute( TC_paging_cs_sig_lac() );
execute( TC_paging_cs_sig_lac_unknown() );
execute( TC_paging_cs_sig_rac() );
execute( TC_paging_cs_sig_rac_unknown() );
execute( TC_paging_cs_sig_bvci() );
execute( TC_paging_cs_sig_bvci_unknown() );
execute( TC_flush_ll() );