pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/40985?usp=email )
Change subject: ranap: Support Tx GlobalRNC-ID during RANAP RESET (ACK) ...................................................................... ranap: Support Tx GlobalRNC-ID during RANAP RESET (ACK) This commit doesn't affect the behavior of any existing testsuite yet, it only updates the templates and adds a RanOps param to be able to pass a GlobalRNC-Id to RAN_Emulation. A follow-up commit will change SGSN_Tests to append GlobalRNC-Id to RANAP Reset when sending towards SGSN, since it's mandatory for an RNC to set it according to 3GPP TS 25.413 8.26.2.2. Change-Id: I0628e412bdff6ed8eefe9051ec351fbd1d0b634f --- M hnbgw/HNBGW_Tests.ttcn M library/RAN_Emulation.ttcnpp M library/ranap/RANAP_Templates.ttcn M library/rua/RUA_Emulation.ttcn M msc/BSC_ConnectionHandler.ttcn M sgsn/SGSN_Tests.ttcn 6 files changed, 103 insertions(+), 51 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/85/40985/1 diff --git a/hnbgw/HNBGW_Tests.ttcn b/hnbgw/HNBGW_Tests.ttcn index df25126..2a343fc 100644 --- a/hnbgw/HNBGW_Tests.ttcn +++ b/hnbgw/HNBGW_Tests.ttcn @@ -237,6 +237,7 @@ ranap_unitdata_cb := refers(MSC_UnitdataCallback), ranap_connect_ind_auto_res := true, ps_domain := false, + grnc_id := omit, decode_dtap := false, role_ms := false, protocol := RAN_PROTOCOL_RANAP, @@ -2735,7 +2736,7 @@ function f_TC_stat_stp_sctp_disconnected_UnitdataCallback(RANAP_PDU ranap) runs on RAN_Emulation_CT return template RANAP_PDU { if (match(ranap, tr_RANAP_Reset)) { log("Answering RESET with RESET-ACK: ", ranap); - return valueof(ts_RANAP_ResetAck(ranap.initiatingMessage.value_.Reset.protocolIEs[1].value_.cN_DomainIndicator)); + return valueof(f_ts_RANAP_ResetAck(ranap.initiatingMessage.value_.Reset.protocolIEs[1].value_.cN_DomainIndicator)); } return omit; } diff --git a/library/RAN_Emulation.ttcnpp b/library/RAN_Emulation.ttcnpp index 4e28ab2..8ebe6de 100644 --- a/library/RAN_Emulation.ttcnpp +++ b/library/RAN_Emulation.ttcnpp @@ -772,7 +772,9 @@ return f_L3_is_rr(l3); } -function f_ranap_reset(SCCP_PAR_Address peer, SCCP_PAR_Address own) runs on RAN_Emulation_CT { +function f_ranap_reset(SCCP_PAR_Address peer, + SCCP_PAR_Address own, + template (omit) GlobalRNC_ID grnc_id := omit) runs on RAN_Emulation_CT { timer T := 5.0; var CN_DomainIndicator dom; if (g_ran_ops.ps_domain) { @@ -781,7 +783,7 @@ dom := cs_domain; } - RANAP.send(ts_RANAP_UNITDATA_req(peer, own, ts_RANAP_Reset(ts_RanapCause_om_intervention, dom))); + RANAP.send(ts_RANAP_UNITDATA_req(peer, own, f_ts_RANAP_Reset(ts_RanapCause_om_intervention, dom, grnc_id))); T.start; alt { [] RANAP.receive(tr_RANAP_UNITDATA_ind(own, peer, tr_RANAP_ResetAck)) { @@ -815,6 +817,7 @@ * This is useful to eg. trigger SCCP CREF. */ boolean ranap_connect_ind_auto_res, boolean ps_domain, + GlobalRNC_ID grnc_id optional, #endif boolean decode_dtap, boolean role_ms, @@ -912,7 +915,7 @@ 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, - ts_RANAP_ResetAck(dom))); + f_ts_RANAP_ResetAck(dom, g_ran_ops.grnc_id))); } #endif } @@ -1320,7 +1323,7 @@ #endif #ifdef RAN_EMULATION_RANAP case (RAN_PROTOCOL_RANAP) { - f_ranap_reset(ops.sccp_addr_peer, ops.sccp_addr_local); + f_ranap_reset(ops.sccp_addr_peer, ops.sccp_addr_local, ops.grnc_id); } #endif } diff --git a/library/ranap/RANAP_Templates.ttcn b/library/ranap/RANAP_Templates.ttcn index 2ea443e..a149cad 100644 --- a/library/ranap/RANAP_Templates.ttcn +++ b/library/ranap/RANAP_Templates.ttcn @@ -21,37 +21,58 @@ * Reset *****************************************************************************************************/ -template (value) RANAP_PDU -ts_RANAP_Reset(template (value) Cause cause, template (value) CN_DomainIndicator dom, - template (omit) Reset.protocolExtensions exts := omit) := { - initiatingMessage := { - procedureCode := id_Reset, - criticality := reject, - value_ := { - Reset := { - protocolIEs := { - { - id := id_Cause, - criticality := ignore, - value_ := { - cause := cause +function f_ts_RANAP_Reset(template (value) Cause cause, + template (value) CN_DomainIndicator dom, + template (omit) GlobalRNC_ID grnc_id := omit, + template (omit) Reset.protocolExtensions exts := omit) +return template (value) RANAP_PDU { + var template (value) RANAP_PDU pdu := { + initiatingMessage := { + procedureCode := id_Reset, + criticality := reject, + value_ := { + Reset := { + protocolIEs := { + { + id := id_Cause, + criticality := ignore, + value_ := { + cause := cause + } + }, { + id := id_CN_DomainIndicator, + criticality := reject, + value_ := { + cN_DomainIndicator := dom + } } - }, { - id := id_CN_DomainIndicator, - criticality := reject, - value_ := { - cN_DomainIndicator := dom - } - } - }, - protocolExtensions := exts + }, + protocolExtensions := exts + } } } + }; + var integer idx := lengthof(pdu.initiatingMessage.value_.Reset.protocolIEs); + + /* Global RNC-ID */ + if (isvalue(grnc_id)) { + pdu.initiatingMessage.value_.Reset.protocolIEs[idx] := + { + id := id_GlobalRNC_ID, + criticality := ignore, + value_ := { globalRNC_ID := grnc_id } + }; + idx := idx + 1; } + + /* TODO: Global CN-ID */ + /* TODO: Extended RNC-ID */ + return pdu; } + template RANAP_PDU tr_RANAP_Reset(template Cause cause := ?, template CN_DomainIndicator dom := ?, - template Reset.protocolExtensions exts := *) := { + template Reset.protocolExtensions exts := *) := { initiatingMessage := { procedureCode := id_Reset, criticality := reject, @@ -78,28 +99,52 @@ } } -template (value) RANAP_PDU -ts_RANAP_ResetAck(template (value) CN_DomainIndicator dom, - template (omit) ResetAcknowledge.protocolExtensions exts := omit) := { - successfulOutcome := { - procedureCode := id_Reset, - criticality := reject, - value_ := { - ResetAcknowledge := { - protocolIEs := { - { - id := id_CN_DomainIndicator, - criticality := reject, - value_ := { - cN_DomainIndicator := dom +function f_ts_RANAP_ResetAck(template (value) CN_DomainIndicator dom, + template (omit) GlobalRNC_ID grnc_id := omit, + template (omit) ResetAcknowledge.protocolExtensions exts := omit) +return template (value) RANAP_PDU { + var template (value) RANAP_PDU pdu := { + successfulOutcome := { + procedureCode := id_Reset, + criticality := reject, + value_ := { + ResetAcknowledge := { + protocolIEs := { + { + id := id_CN_DomainIndicator, + criticality := reject, + value_ := { + cN_DomainIndicator := dom + } } - } - }, - protocolExtensions := exts + }, + protocolExtensions := exts + } } } + }; + var integer idx := lengthof(pdu.successfulOutcome.value_.ResetAcknowledge.protocolIEs); + + /* TODO: Criticality Diagnostics */ + + /* Global RNC-ID */ + if (isvalue(grnc_id)) { + pdu.successfulOutcome.value_.ResetAcknowledge.protocolIEs[idx] := + { + id := id_GlobalRNC_ID, + criticality := ignore, + value_ := { globalRNC_ID := grnc_id } + }; + idx := idx + 1; } + + /* TODO: Global CN-ID */ + /* TODO: Extended RNC-ID */ + return pdu; } + + + template RANAP_PDU tr_RANAP_ResetAck(template CN_DomainIndicator dom := ?, template ResetAcknowledge.protocolExtensions exts := *) := { diff --git a/library/rua/RUA_Emulation.ttcn b/library/rua/RUA_Emulation.ttcn index 8b28a98..025bbf8 100644 --- a/library/rua/RUA_Emulation.ttcn +++ b/library/rua/RUA_Emulation.ttcn @@ -253,7 +253,7 @@ var RANAP_PDU rx := dec_RANAP_PDU(rua_clt.initiatingMessage.value_.connectionlessTransfer.protocolIEs[0].value_.rANAP_Message); var RANAP_IEs.CN_DomainIndicator dom; dom := rx.initiatingMessage.value_.Reset.protocolIEs[1].value_.cN_DomainIndicator; - RUA.send(ts_RUA_ConnectionlessTransfer(enc_RANAP_PDU(valueof(ts_RANAP_ResetAck(dom))))); + RUA.send(ts_RUA_ConnectionlessTransfer(enc_RANAP_PDU(valueof(f_ts_RANAP_ResetAck(dom))))); } } @@ -365,10 +365,11 @@ -function f_ranap_reset(RANAP_IEs.CN_DomainIndicator dom) runs on RUA_Emulation_CT { +function f_ranap_reset(RANAP_IEs.CN_DomainIndicator dom, + template (omit) GlobalRNC_ID grnc_id := omit) runs on RUA_Emulation_CT { timer T := 5.0; - var RANAP_PDU tx := valueof(ts_RANAP_Reset(ts_RanapCause_om_intervention,dom)); + var RANAP_PDU tx := valueof(f_ts_RANAP_Reset(ts_RanapCause_om_intervention, dom, grnc_id)); RUA.send(ts_RUA_ConnectionlessTransfer(enc_RANAP_PDU(tx))); T.start; alt { diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn index fc3522e..6acaa20 100644 --- a/msc/BSC_ConnectionHandler.ttcn +++ b/msc/BSC_ConnectionHandler.ttcn @@ -259,7 +259,7 @@ log("RANAP_RncUnitdataCallback: Responding to RESET with RESET-ACK"); var CN_DomainIndicator dom; dom := ranap.initiatingMessage.value_.Reset.protocolIEs[1].value_.cN_DomainIndicator; - resp := ts_RANAP_ResetAck(dom); + resp := f_ts_RANAP_ResetAck(dom); } /* FIXME: Handle paging, etc. */ @@ -275,6 +275,7 @@ ranap_unitdata_cb := refers(RncUnitdataCallback), ranap_connect_ind_auto_res := true, ps_domain := false, + grnc_id := omit, decode_dtap := true, role_ms := true, protocol := RAN_PROTOCOL_BSSAP, diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn index 3ab2485..493c50f 100644 --- a/sgsn/SGSN_Tests.ttcn +++ b/sgsn/SGSN_Tests.ttcn @@ -454,7 +454,7 @@ log("RANAP_RncUnitdataCallback: Responding to RESET with RESET-ACK"); var CN_DomainIndicator dom; dom := ranap.initiatingMessage.value_.Reset.protocolIEs[1].value_.cN_DomainIndicator; - resp := ts_RANAP_ResetAck(dom); + resp := f_ts_RANAP_ResetAck(dom); } return resp; } @@ -464,6 +464,7 @@ ranap_unitdata_cb := refers(RncUnitdataCallback), ranap_connect_ind_auto_res := true, ps_domain := true, + grnc_id := omit, decode_dtap := true, role_ms := true, protocol := RAN_PROTOCOL_RANAP, -- To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/40985?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: I0628e412bdff6ed8eefe9051ec351fbd1d0b634f Gerrit-Change-Number: 40985 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pes...@sysmocom.de>