aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2023-06-10 00:22:51 +0200
committerneels <nhofmeyr@sysmocom.de>2023-08-19 01:59:27 +0000
commit8f5c80d070b168d89d56ec5dbfb0bb8e6ae0c3b4 (patch)
treed9971a787f1ce3414eff10abfaa1bf7411d836af
parent02040fdc3dc40c83eef135caf04e8c5ac3e525ad (diff)
rua: also match on RUA Disconnect without RANAP payload
Add tr_RUA_Disconnect_opt_ranap that matches RUA Disconnect with and without RANAP payload. Use this in RUA_Emulation as_main_rua(), to trigger a RUA_Disc_Ind to the CLIENT also for Disconnect without RANAP data. Rationale: This patch exists for the line RUA.receive(RUA_Disc_Ind:?); in the TC_apply_sccp patch Ia1ff0cb56893edf045ea3cb3233882ca93445d21 In upcoming HNBGW_Tests.TC_apply_sccp, I want to test for an ungraceful RUA Disconnect, which is sent without a RANAP payload. But tr_RUA_Disconnect only matches when a RANAP Message IE is present. In consequence, RUA_Emulation ignores "empty" RUA Disconnect, and my test case cannot verify that the RUA Disconnect occurred. Fix that. Change-Id: Ia0b89e9198794d196a88040ee89bdf24f3b08ae0
-rw-r--r--library/rua/RUA_Emulation.ttcn8
-rw-r--r--library/rua/RUA_Templates.ttcn32
2 files changed, 37 insertions, 3 deletions
diff --git a/library/rua/RUA_Emulation.ttcn b/library/rua/RUA_Emulation.ttcn
index af4b8b33..a9c445e0 100644
--- a/library/rua/RUA_Emulation.ttcn
+++ b/library/rua/RUA_Emulation.ttcn
@@ -301,13 +301,15 @@ private altstep as_main_rua() runs on RUA_Emulation_CT {
}
/* RUA -> Client: disconnect of an existing connection */
- [] RUA.receive(tr_RUA_Disconnect) -> value rua {
+ [] RUA.receive(tr_RUA_Disconnect_opt_ranap) -> value rua {
cause := rua.initiatingMessage.value_.disconnect_.protocolIEs[2].value_.cause;
context_id := rua.initiatingMessage.value_.disconnect_.protocolIEs[1].value_.context_ID;
vc_conn := f_comp_by_context_id(context_id);
/* send contained RANAP message to user */
- ranap_enc := rua.initiatingMessage.value_.disconnect_.protocolIEs[3].value_.rANAP_Message;
- f_handle_userData_RANAP(vc_conn, dec_RANAP_PDU(ranap_enc));
+ if (lengthof(rua.initiatingMessage.value_.disconnect_.protocolIEs) > 3) {
+ ranap_enc := rua.initiatingMessage.value_.disconnect_.protocolIEs[3].value_.rANAP_Message;
+ f_handle_userData_RANAP(vc_conn, dec_RANAP_PDU(ranap_enc));
+ }
/* notify user of disconnect */
if (CLIENT.checkstate("Connected")) {
CLIENT.send(RUA_Disc_Ind:{cause});
diff --git a/library/rua/RUA_Templates.ttcn b/library/rua/RUA_Templates.ttcn
index ee65412f..738042ea 100644
--- a/library/rua/RUA_Templates.ttcn
+++ b/library/rua/RUA_Templates.ttcn
@@ -231,6 +231,38 @@ tr_RUA_Disconnect(template (present) CN_DomainIndicator domain := ?,
}
}
+/* Same as tr_RUA_Disconnect() but without a ranap arg: match also a RUA Disconnect without any RANAP payload. */
+template (present) RUA_PDU
+tr_RUA_Disconnect_opt_ranap(template (present) CN_DomainIndicator domain := ?,
+ template (present) bitstring context_id := ?,
+ template (present) Cause cause := ?) := {
+ initiatingMessage := {
+ procedureCode := 3,
+ criticality := reject,
+ value_ := {
+ disconnect_ := {
+ protocolIEs := {
+ {
+ id := 7,
+ criticality := reject,
+ value_ := { cN_DomainIndicator := domain }
+ }, {
+ id := 3,
+ criticality := reject,
+ value_ := { context_ID := context_id }
+ }, {
+ id := 1,
+ criticality := reject,
+ value_ := { cause := cause }
+ },
+ *
+ },
+ protocolExtensions := omit
+ }
+ }
+ }
+}
+
/* 9.1.6 CONNECTIONLESS TRANSFER */
template (value) RUA_PDU
ts_RUA_ConnectionlessTransfer(template (value) octetstring ranap_msg) := {