diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2023-06-10 00:22:51 +0200 |
---|---|---|
committer | neels <nhofmeyr@sysmocom.de> | 2023-08-19 01:59:27 +0000 |
commit | 8f5c80d070b168d89d56ec5dbfb0bb8e6ae0c3b4 (patch) | |
tree | d9971a787f1ce3414eff10abfaa1bf7411d836af | |
parent | 02040fdc3dc40c83eef135caf04e8c5ac3e525ad (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.ttcn | 8 | ||||
-rw-r--r-- | library/rua/RUA_Templates.ttcn | 32 |
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) := { |