hnbgw: add f_bssap_expect()

End the guessing when seeing "timeout of T_guard": set a precise failure
verdict when an expected RANAP/SCCP ("BSSAP") message did not arrive as
expected.

Change-Id: I51c60ed8fcef83c98e6c62c9f62a8c3c665de860
This commit is contained in:
Neels Hofmeyr 2023-03-09 02:47:50 +01:00 committed by neels
parent 6bbfe057af
commit dc416c97b3
1 changed files with 29 additions and 41 deletions

View File

@ -474,6 +474,28 @@ private altstep as_Tguard_ConnHdlr() runs on ConnHdlr {
}
}
private function f_bssap_expect(template (present) RANAP_PDU exp_rx) runs on ConnHdlr return RANAP_PDU
{
var RANAP_PDU rx;
timer T := 5.0;
T.start;
alt {
[] BSSAP.receive(exp_rx) -> value rx {
setverdict(pass);
}
[] BSSAP.receive(RANAP_PDU:?) {
setverdict(fail, "Got an unexpected RANAP message on BSSAP port, was waiting for ", exp_rx);
mtc.stop;
}
[] T.timeout {
setverdict(fail, "Timeout waiting for RANAP on BSSAP port: ", exp_rx);
mtc.stop;
}
}
T.stop;
return rx;
}
/* send RANAP on Iuh and expect it to show up on Iu */
function f_iuh2iu(template (present) RANAP_PDU tx, template RANAP_PDU exp_rx := omit)
runs on ConnHdlr return RANAP_PDU {
@ -485,17 +507,8 @@ runs on ConnHdlr return RANAP_PDU {
}
RUA.send(tx);
T.start;
alt {
[] BSSAP.receive(exp_rx) -> value rx {
setverdict(pass);
}
[] T.timeout {
setverdict(fail, "Timeout waiting for Iu ", exp_rx);
}
}
return rx;
return f_bssap_expect(exp_rx);
}
/* send RANAP on Iu and expect it to show up on Iuh */
@ -560,16 +573,7 @@ runs on ConnHdlr return RANAP_PDU {
}
/* expect to receive it on the Iu side */
T.start;
alt {
[] BSSAP.receive(exp_rx) -> value rx {
setverdict(pass);
}
[] T.timeout {
setverdict(fail, "Timeout waiting for Iu ", exp_rx);
}
}
return rx;
return f_bssap_expect(exp_rx);
}
/* 3GPP TS 48.006 9.2 Connection release:
@ -600,17 +604,10 @@ runs on ConnHdlr return RANAP_PDU {
RUA.send(RUA_Disc_Req:{tx, cause});
/* expect to receive it on the Iu side */
T.start;
alt {
[] BSSAP.receive(exp_rx) -> value rx {
}
[] T.timeout {
setverdict(fail, "Timeout waiting for Iu ", exp_rx);
return rx;
}
}
rx := f_bssap_expect(exp_rx);
/* expect disconnect on the Iu side */
T.start;
alt {
[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
setverdict(pass);
@ -969,13 +966,11 @@ friend function f_rab_ass_resp(inout MgcpParameters pars) runs on ConnHdlr {
var MgcpCommand mgcp_cmd;
var RANAP_PDU tx;
var template RAB_SetupOrModifiedList rab_smdl;
timer T := 5.0;
/* Send back RAB Assignment Response via Iuh */
rab_smdl := ts_RAB_SMdL(t_RAB_id(23), f_ts_RAB_TLA(pars.hnb_rtp_ip), t_RAB_binding_port(pars.hnb_rtp_port));
tx := valueof(ts_RANAP_RabAssResp(rab_smdl));
RUA.send(tx);
T.start;
interleave {
/* Expect MDCX with IP/port from RAB Assignment Response */
@ -1000,14 +995,7 @@ friend function f_rab_ass_resp(inout MgcpParameters pars) runs on ConnHdlr {
rab_smdl := ts_RAB_SMdL(t_RAB_id(23), f_ts_RAB_TLA(pars.mgw_conn_2.mgw_rtp_ip), t_RAB_binding_port(pars.mgw_conn_2.mgw_rtp_port));
tx := valueof(ts_RANAP_RabAssResp(rab_smdl));
alt {
[] BSSAP.receive(tx) {
setverdict(pass);
}
[] T.timeout {
setverdict(fail, "Timeout waiting for Iuh ", tx);
}
}
f_bssap_expect(tx);
}
private altstep as_mgcp_dlcx(inout TestHdlrParams pars) runs on ConnHdlr {
@ -1398,7 +1386,7 @@ friend function f_tc_ps_rab_assignment_with_pfcp(charstring id, TestHdlrParams p
PFCP.send(r);
rab_smdl := ts_RAB_SMdL_ps(t_RAB_id(23), f_ts_RAB_TLA(gtp_pars.core.local.addr), gtp_pars.core.local.teid);
BSSAP.receive(tr_RANAP_RabAssResp(rab_smdl));
f_bssap_expect(tr_RANAP_RabAssResp(rab_smdl));
f_sleep(2.0);
tx := valueof(ts_RANAP_IuReleaseCommand(ts_RanapCause_om_intervention));
@ -1464,7 +1452,7 @@ friend function f_tc_ps_rab_assignment_without_pfcp(charstring id, TestHdlrParam
RUA.send(tx);
/* Expect on IuPS: unmodified RAB Assignment Response */
BSSAP.receive(tr_RANAP_RabAssResp(rab_smdl));
f_bssap_expect(tr_RANAP_RabAssResp(rab_smdl));
f_sleep(2.0);
tx := valueof(ts_RANAP_IuReleaseCommand(ts_RanapCause_om_intervention));