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>

Reply via email to