pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42024?usp=email )
Change subject: RAN_Emulation: Assume SCCP peer available if rx BSSAP/RANAP
Reset
......................................................................
RAN_Emulation: Assume SCCP peer available if rx BSSAP/RANAP Reset
This way we speed up tests, and also avoid extra verbosity by avoiding
receiving and transmitting extra RESET.
Change-Id: Id9020320b61d89720e17e1024b629f0227445266
---
M library/RAN_Emulation.ttcnpp
1 file changed, 43 insertions(+), 12 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks
refs/changes/24/42024/1
diff --git a/library/RAN_Emulation.ttcnpp b/library/RAN_Emulation.ttcnpp
index d308355..3a10b14 100644
--- a/library/RAN_Emulation.ttcnpp
+++ b/library/RAN_Emulation.ttcnpp
@@ -1387,17 +1387,19 @@
}
#ifdef RAN_EMULATION_BSSAP
-function f_bssap_wait_sccp_peer_available(BSSAP_CODEC_PT pt, integer peer_pc,
float timeout_sec := 3.0)
+/* returns true if upper layer (RANAP) is also ready (RESET received and
acked) */
+private function f_bssap_wait_sccp_peer_available(integer peer_pc, float
timeout_sec := 3.0) runs on RAN_Emulation_CT return boolean
{
timer T;
var ASP_SCCP_N_PCSTATE_ind n_pcstate_ind;
+ var BSSAP_N_UNITDATA_ind ud_ind;
var boolean rx_explicit_down := false;
log("Waiting for SCCP peer PC=", peer_pc, " to become available");
T.start(timeout_sec);
alt {
- [] pt.receive(t_ASP_N_PCSTATE_ind(?, ?, *, *)) -> value n_pcstate_ind {
+ [] BSSAP.receive(t_ASP_N_PCSTATE_ind(?, ?, *, *)) -> value
n_pcstate_ind {
var integer aff_pc := bit2int(n_pcstate_ind.affectedSP);
if (aff_pc != peer_pc) {
log("Waiting for SCCP peer PC=", peer_pc, ": Rx
N-PCSTATE.ind for another peer PC=", aff_pc, ", ",n_pcstate_ind);
@@ -1408,13 +1410,23 @@
log("SCCP peer PC=", aff_pc," is now available");
/* All peer is available, we are done */
T.stop;
- return;
+ return false;
}
log("SCCP peer PC=", aff_pc," is NOT available: ",
n_pcstate_ind);
rx_explicit_down := true;
repeat;
}
- [] pt.receive {
+ [] BSSAP.receive(tr_BSSAP_UNITDATA_ind(g_ran_ops.sccp_addr_local,
g_ran_ops.sccp_addr_peer, tr_BSSMAP_Reset(append_osmux_support))) -> value
ud_ind {
+ log("Waiting for SCCP peer PC=", peer_pc, ": Rx BSSMAP RANAP
RESET, ACKing");
+ var CN_DomainIndicator dom;
+ dom :=
rud_ind.userData.initiatingMessage.value_.Reset.protocolIEs[1].value_.cN_DomainIndicator;
+ RANAP.send(ts_RANAP_UNITDATA_req(rud_ind.callingAddress,
rud_ind.calledAddress,
+ f_ts_RANAP_ResetAck(dom, g_ran_ops.grnc_id)));
+ /* Peer is available on RANAP, so it must also be available on
SCCP; done. */
+ T.stop;
+ return true;
+ }
+ [] BSSAP.receive {
log("Waiting for SCCP peer PC=", peer_pc, ": Discarding
message");
repeat;
}
@@ -1428,21 +1440,24 @@
}
}
log("Done waiting for SCCP peer PC=", peer_pc);
+ return false;
}
#endif
#ifdef RAN_EMULATION_RANAP
-function f_ranap_wait_sccp_peer_available(RANAP_CODEC_PT pt, integer peer_pc,
float timeout_sec := 3.0)
+/* returns true if upper layer (RANAP) is also ready (RESET received and
acked) */
+private function f_ranap_wait_sccp_peer_available(integer peer_pc, float
timeout_sec := 3.0) runs on RAN_Emulation_CT return boolean
{
timer T;
var ASP_SCCP_N_PCSTATE_ind n_pcstate_ind;
+ var RANAP_N_UNITDATA_ind rud_ind;
var boolean rx_explicit_down := false;
log("Waiting for SCCP peer PC=", peer_pc, " to become available");
T.start(timeout_sec);
alt {
- [] pt.receive(t_ASP_N_PCSTATE_ind(?, ?, *, *)) -> value n_pcstate_ind {
+ [] RANAP.receive(t_ASP_N_PCSTATE_ind(?, ?, *, *)) -> value
n_pcstate_ind {
var integer aff_pc := bit2int(n_pcstate_ind.affectedSP);
if (aff_pc != peer_pc) {
log("Waiting for SCCP peer PC=", peer_pc, ": Rx
N-PCSTATE.ind for another peer PC=", aff_pc, ", ",n_pcstate_ind);
@@ -1453,13 +1468,23 @@
log("SCCP peer PC=", aff_pc," is now available");
/* All peer is available, we are done */
T.stop;
- return;
+ return false;
}
log("SCCP peer PC=", aff_pc," is NOT available: ",
n_pcstate_ind);
rx_explicit_down := true;
repeat;
}
- [] pt.receive {
+ [] RANAP.receive(tr_RANAP_UNITDATA_ind(g_ran_ops.sccp_addr_local,
g_ran_ops.sccp_addr_peer, tr_RANAP_Reset)) -> value rud_ind {
+ log("Waiting for SCCP peer PC=", peer_pc, ": Rx Iu RANAP RESET,
ACKing");
+ var CN_DomainIndicator dom;
+ dom :=
rud_ind.userData.initiatingMessage.value_.Reset.protocolIEs[1].value_.cN_DomainIndicator;
+ RANAP.send(ts_RANAP_UNITDATA_req(rud_ind.callingAddress,
rud_ind.calledAddress,
+ f_ts_RANAP_ResetAck(dom, g_ran_ops.grnc_id)));
+ /* Peer is available on RANAP, so it must also be available on
SCCP; done. */
+ T.stop;
+ return true;
+ }
+ [] RANAP.receive {
log("Waiting for SCCP peer PC=", peer_pc, ": Discarding
message");
repeat;
}
@@ -1473,6 +1498,7 @@
}
}
log("Done waiting for SCCP peer PC=", peer_pc);
+ return false;
}
#endif
@@ -1484,21 +1510,26 @@
f_expect_table_init();
if (isvalue(ops.sccp_addr_peer) and isvalue(ops.sccp_addr_local)) {
+ var boolean received_reset := false;
select (g_ran_ops.protocol) {
#ifdef RAN_EMULATION_BSSAP
case (RAN_PROTOCOL_BSSAP) {
if (ispresent(ops.sccp_addr_peer.signPointCode)) {
- f_bssap_wait_sccp_peer_available(BSSAP,
bit2int(ops.sccp_addr_peer.signPointCode));
+ received_reset :=
f_bssap_wait_sccp_peer_available(bit2int(ops.sccp_addr_peer.signPointCode));
}
- f_bssap_reset(ops.sccp_addr_peer, ops.sccp_addr_local);
+ if (not received_reset) {
+ f_bssap_reset(ops.sccp_addr_peer,
ops.sccp_addr_local);
+ }
}
#endif
#ifdef RAN_EMULATION_RANAP
case (RAN_PROTOCOL_RANAP) {
if (ispresent(ops.sccp_addr_peer.signPointCode)) {
- f_ranap_wait_sccp_peer_available(RANAP,
bit2int(ops.sccp_addr_peer.signPointCode));
+ received_reset :=
f_ranap_wait_sccp_peer_available(bit2int(ops.sccp_addr_peer.signPointCode));
}
- f_ranap_reset(ops.sccp_addr_peer, ops.sccp_addr_local,
ops.grnc_id);
+ if (not received_reset) {
+ f_ranap_reset(ops.sccp_addr_peer,
ops.sccp_addr_local, ops.grnc_id);
+ }
}
#endif
}
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42024?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Id9020320b61d89720e17e1024b629f0227445266
Gerrit-Change-Number: 42024
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>