pespin submitted this change.
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(-)
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 change 40985. To unsubscribe, or for help writing mail filters, visit settings.