<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/24129">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">sgsn: Introduce test TC_rim_eutran_to_geran<br><br>GTP_Templates.ttcn new templates use BssgpCellId, hence it depends on Osmocom_Gb_Types.ttcn.<br><br>Related: SYS#5314<br>Change-Id: I9dcf6ee2dc55bc6aba178eca30080233254f025e<br>---<br>M deps/Makefile<br>M ggsn_tests/gen_links.sh<br>M library/GTP_Emulation.ttcn<br>M library/GTP_Templates.ttcn<br>M pgw/gen_links.sh<br>M sgsn/SGSN_Tests.ttcn<br>M sgsn/osmo-sgsn.cfg<br>7 files changed, 580 insertions(+), 17 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/deps/Makefile b/deps/Makefile</span><br><span>index 8dc2a82..3d49a68 100644</span><br><span>--- a/deps/Makefile</span><br><span>+++ b/deps/Makefile</span><br><span>@@ -15,6 +15,7 @@</span><br><span> </span><br><span> ECLIPSEGITHUB:=https://github.com/eclipse</span><br><span> ECLIPSEGIT2:=https://git.eclipse.org/r/titan</span><br><span style="color: hsl(120, 100%, 40%);">+ECLIPSEGITLAB:=https://gitlab.eclipse.org/eclipse/titan</span><br><span> OSMOGITHUB:=https://github.com/osmocom</span><br><span> OSMOGIT:=git://git.osmocom.org</span><br><span> </span><br><span>@@ -51,7 +52,6 @@</span><br><span>                       titan.ProtocolModules.SUA \</span><br><span>                  titan.ProtocolModules.SDP \</span><br><span>                  titan.ProtocolModules.BSSAPP_v7.3.0 \</span><br><span style="color: hsl(0, 100%, 40%);">-                   titan.ProtocolModules.GTP_v13.5.0 \</span><br><span>                  titan.ProtocolModules.GTPv2_v13.7.0 \</span><br><span>                        titan.ProtocolModules.ISUP_Q.762 \</span><br><span>                   titan.ProtocolModules.LLC_v7.1.0 \</span><br><span>@@ -61,6 +61,8 @@</span><br><span>                       titan.ProtocolModules.SGsAP_13.2.0 \</span><br><span>                         titan.ProtocolModules.SNDCP_v7.0.0</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ECLIPSEGITLAB_REPOS=    titan.ProtocolModules.GTP_v13.5.0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> OSMOGITHUB_REPOS=        titan.TestPorts.SCTPasp \</span><br><span>                    titan.TestPorts.MTP3asp \</span><br><span>                    titan.TestPorts.UDPasp \</span><br><span>@@ -73,7 +75,7 @@</span><br><span>                         titan.TestPorts.AF_PACKET \</span><br><span>                  osmo-uecups</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-ALL_REPOS=$(ECLIPSEGITHUB_REPOS) $(ECLIPSEGIT2_REPOS) $(OSMOGITHUB_REPOS) $(OSMOGIT_REPOS)</span><br><span style="color: hsl(120, 100%, 40%);">+ALL_REPOS=$(ECLIPSEGITHUB_REPOS) $(ECLIPSEGIT2_REPOS) $(ECLIPSEGITLAB_REPOS) $(OSMOGITHUB_REPOS) $(OSMOGIT_REPOS)</span><br><span> </span><br><span> # Tag names from 'git-describe --tags'; if not available, a commit hash may be used instead.</span><br><span> # Do not put references to branches here, except for local testing: this breaks the caching</span><br><span>@@ -87,7 +89,7 @@</span><br><span> titan.ProtocolModules.BSSMAP_commit=             24f967b2f77bfdd2e6eabf1e82fa76239095f772</span><br><span> titan.ProtocolModules.DNS_commit=           R.7.B</span><br><span> titan.ProtocolModules.GRE_commit=              R.2.A-5-g654c446</span><br><span style="color: hsl(0, 100%, 40%);">-titan.ProtocolModules.GTP_v13.5.0_commit=       R.2.A-5-ge120ace</span><br><span style="color: hsl(120, 100%, 40%);">+titan.ProtocolModules.GTP_v13.5.0_commit=     54219599037626c675610d3a44433d01af264fbb</span><br><span> titan.ProtocolModules.GTPv2_v13.7.0_commit= R.2.A-5-g85cb124</span><br><span> titan.ProtocolModules.ICMP_commit=          e49d9fb9f7de637b4bf4803dc6b6e911a8661640</span><br><span> titan.ProtocolModules.ICMPv6_commit=                46f4d9b6e1e3c794294a92588401a81e4881dd27</span><br><span>@@ -187,6 +189,9 @@</span><br><span> $(foreach dir,$(ECLIPSEGIT2_REPOS), \</span><br><span>      $(eval $(call GIT_template,$(dir),$(ECLIPSEGIT2))))</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+$(foreach dir,$(ECLIPSEGITLAB_REPOS), \</span><br><span style="color: hsl(120, 100%, 40%);">+      $(eval $(call GIT_template,$(dir),$(ECLIPSEGITLAB))))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> $(foreach dir,$(OSMOGITHUB_REPOS), \</span><br><span>      $(eval $(call GIT_template,$(dir),$(OSMOGITHUB))))</span><br><span> </span><br><span>diff --git a/ggsn_tests/gen_links.sh b/ggsn_tests/gen_links.sh</span><br><span>index 1b54e9d..f9bae1c 100755</span><br><span>--- a/ggsn_tests/gen_links.sh</span><br><span>+++ b/ggsn_tests/gen_links.sh</span><br><span>@@ -44,9 +44,17 @@</span><br><span> FILES="TELNETasp_PT.cc  TELNETasp_PT.hh  TELNETasp_PortType.ttcn"</span><br><span> gen_links $DIR $FILES</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.ProtocolModules.NS_v7.3.0/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="NS_Types.ttcn"</span><br><span style="color: hsl(120, 100%, 40%);">+gen_links $DIR $FILES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.ProtocolModules.BSSGP_v13.0.0/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="BSSGP_EncDec.cc  BSSGP_Types.ttcn"</span><br><span style="color: hsl(120, 100%, 40%);">+gen_links $DIR $FILES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DIR=../library</span><br><span> FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn Osmocom_Types.ttcn Native_Functions.ttcn Native_FunctionDefs.cc IPCP_Types.ttcn PAP_Types.ttcn "</span><br><span style="color: hsl(0, 100%, 40%);">-FILES+="GTP_CodecPort.ttcn GTP_CodecPort_CtrlFunct.ttcn GTP_CodecPort_CtrlFunctDef.cc GTP_Templates.ttcn "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="GTP_CodecPort.ttcn GTP_CodecPort_CtrlFunct.ttcn GTP_CodecPort_CtrlFunctDef.cc GTP_Templates.ttcn Osmocom_Gb_Types.ttcn "</span><br><span> FILES+="Osmocom_VTY_Functions.ttcn "</span><br><span> gen_links $DIR $FILES</span><br><span> </span><br><span>diff --git a/library/GTP_Emulation.ttcn b/library/GTP_Emulation.ttcn</span><br><span>index 43c034b..b67e828 100644</span><br><span>--- a/library/GTP_Emulation.ttcn</span><br><span>+++ b/library/GTP_Emulation.ttcn</span><br><span>@@ -43,6 +43,7 @@</span><br><span>  /* Communication with Clients */</span><br><span>     port GTPEM_PT CLIENT;</span><br><span>        port GTPEM_PROC_PT CLIENT_PROC;</span><br><span style="color: hsl(120, 100%, 40%);">+       port GTPEM_PT CLIENT_DEFAULT;</span><br><span> </span><br><span>    /* Configuration by the user */</span><br><span>      var GtpEmulationCfg g_gtp_cfg;</span><br><span>@@ -199,11 +200,16 @@</span><br><span>                       vc_conn := f_comp_by_teid(g1c_ud.gtpc.teid);</span><br><span>                         CLIENT.send(g1c_ud) to vc_conn;</span><br><span>              } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        /* Send to all clients */</span><br><span style="color: hsl(0, 100%, 40%);">-                       var integer i;</span><br><span style="color: hsl(0, 100%, 40%);">-                  for (i := 0; i < sizeof(TidTable); i := i+1) {</span><br><span style="color: hsl(0, 100%, 40%);">-                               if (isbound(TidTable[i].teid) and TidTable[i].teid == teid) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                   CLIENT.send(g1c_ud) to TidTable[i].vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+                   /* Check if a default port is set: */</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (CLIENT_DEFAULT.checkstate("Connected")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               CLIENT_DEFAULT.send(g1c_ud);</span><br><span style="color: hsl(120, 100%, 40%);">+                  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              /* Send to all clients */</span><br><span style="color: hsl(120, 100%, 40%);">+                             var integer i;</span><br><span style="color: hsl(120, 100%, 40%);">+                                for (i := 0; i < sizeof(TidTable); i := i+1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                     if (isbound(TidTable[i].teid) and TidTable[i].teid == teid) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                         CLIENT.send(g1c_ud) to TidTable[i].vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+                                   }</span><br><span>                            }</span><br><span>                    }</span><br><span>            }</span><br><span>@@ -220,7 +226,9 @@</span><br><span>      [] CLIENT.receive(Gtp1uUnitdata:?) -> value g1u_ud sender vc_conn {</span><br><span>               GTPU.send(g1u_ud);</span><br><span>           }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+     [] CLIENT_DEFAULT.receive(Gtp1cUnitdata:?) -> value g1c_ud sender vc_conn {</span><br><span style="color: hsl(120, 100%, 40%);">+                GTPC.send(g1c_ud);</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span> </span><br><span>        [] CLIENT_PROC.getcall(GTPEM_register_imsi:{?}) -> param(imsi) sender vc_conn {</span><br><span>           f_imsi_tbl_add(imsi, vc_conn);</span><br><span>diff --git a/library/GTP_Templates.ttcn b/library/GTP_Templates.ttcn</span><br><span>index aa42759..1bd56e1 100644</span><br><span>--- a/library/GTP_Templates.ttcn</span><br><span>+++ b/library/GTP_Templates.ttcn</span><br><span>@@ -17,6 +17,7 @@</span><br><span>      import from GTPU_Types all;</span><br><span>  import from GTP_CodecPort all;</span><br><span>       import from IPCP_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+   import from Osmocom_Gb_Types all; // BssgpCellId</span><br><span> </span><br><span>         /* Table 38 of 3GPP TS 29.060 */</span><br><span>     type enumerated GTP_Cause {</span><br><span>@@ -30,6 +31,28 @@</span><br><span>             /* FIXME */</span><br><span>  };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        private function f_oct_or_wc(template integer inp, integer len) return template octetstring {</span><br><span style="color: hsl(120, 100%, 40%);">+         if (istemplatekind(inp, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+          } else if (istemplatekind(inp, "*")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      return *;</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (istemplatekind(inp, "?")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      return ?;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             return int2oct(valueof(inp), len);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   private function f_hex_or_wc(template integer inp, integer len) return template hexstring {</span><br><span style="color: hsl(120, 100%, 40%);">+           if (istemplatekind(inp, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+          } else if (istemplatekind(inp, "*")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      return *;</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (istemplatekind(inp, "?")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      return ?;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             return int2hex(valueof(inp), len);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  /* generalized GTP-C receive template */</span><br><span>     template PDU_GTPC tr_GTP1C_PDU(template OCT1 msg_type, template OCT4 teid, template GTPC_PDUs pdu := ?) := {</span><br><span>                 /* N-PDU Number flag (PN) shall be set to '0'. A GTP-C receiver shall not return an</span><br><span>@@ -612,6 +635,408 @@</span><br><span>  }</span><br><span> </span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     /* GTP-C RIM */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) RIM_Application_Identity_GTPC ts_GTPC_RIM_Application_Identity(OCT1 app_id) := {</span><br><span style="color: hsl(120, 100%, 40%);">+              iEI := '4B'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                 ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                 length1 := 1</span><br><span style="color: hsl(120, 100%, 40%);">+           },</span><br><span style="color: hsl(120, 100%, 40%);">+            rIMApplicationIdentity := app_id</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* 3GPP TS 48.018 11.3.62 */</span><br><span style="color: hsl(120, 100%, 40%);">+  template (value) RIM_Sequence_Number_GTPC ts_GTPC_RIM_Sequence_Number(integer seq) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                iEI := '4C'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                 ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                 length1 := 4</span><br><span style="color: hsl(120, 100%, 40%);">+           },</span><br><span style="color: hsl(120, 100%, 40%);">+            rIMSequenceNumber := int2oct(seq, 4)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) RIM_PDU_Indications_GTPC ts_GTPC_RIM_PDU_Indications(boolean ack, BIT3 type_ext) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                 iEI := '4F'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                 ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                 length1 := 1</span><br><span style="color: hsl(120, 100%, 40%);">+           },</span><br><span style="color: hsl(120, 100%, 40%);">+            ack := bool2bit(ack),</span><br><span style="color: hsl(120, 100%, 40%);">+                 pDU_Type_Extension := type_ext,</span><br><span style="color: hsl(120, 100%, 40%);">+               reserved := '0000'B</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* 3GPP TS 48.018 11.3.67 */</span><br><span style="color: hsl(120, 100%, 40%);">+  template (value) RIM_Protocol_Version_Number_GTPC ts_GTPC_RIM_Protocol_Version_Number(integer ver) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                iEI := '55'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                 ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                 length1 := 1</span><br><span style="color: hsl(120, 100%, 40%);">+           },</span><br><span style="color: hsl(120, 100%, 40%);">+            rIMProtocolVersionNumber := int2oct(ver, 1)</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     function tr_GTPC_Cell_Identifier_V(template BssgpCellId cid) return template Cell_Identifier_V_GTPC {</span><br><span style="color: hsl(120, 100%, 40%);">+         var template Cell_Identifier_V_GTPC ret := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  mccDigit1 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                       mccDigit2 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                       mccDigit3 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                       mncDigit3 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                       mncDigit1 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                       mncDigit2 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                       lac := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                     rac := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                     cI_value := ?</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (istemplatekind(cid, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+          } else if (istemplatekind(cid, "*")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      return *;</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (istemplatekind(cid, "?")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      return ?;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (isvalue(cid) and isvalue(cid.ra_id) and isvalue(cid.ra_id.lai)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (isvalue(cid.ra_id.lai.mcc_mnc)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                         ret.mccDigit1 := cid.ra_id.lai.mcc_mnc[0];</span><br><span style="color: hsl(120, 100%, 40%);">+                            ret.mccDigit2 := cid.ra_id.lai.mcc_mnc[1];</span><br><span style="color: hsl(120, 100%, 40%);">+                            ret.mccDigit3 := cid.ra_id.lai.mcc_mnc[2];</span><br><span style="color: hsl(120, 100%, 40%);">+                            ret.mncDigit3 := cid.ra_id.lai.mcc_mnc[3];</span><br><span style="color: hsl(120, 100%, 40%);">+                            ret.mncDigit1 := cid.ra_id.lai.mcc_mnc[4];</span><br><span style="color: hsl(120, 100%, 40%);">+                            ret.mncDigit2 := cid.ra_id.lai.mcc_mnc[5];</span><br><span style="color: hsl(120, 100%, 40%);">+                    }</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (isvalue(cid.ra_id.lai.lac)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                             ret.lac := f_oct_or_wc(cid.ra_id.lai.lac, 2);</span><br><span style="color: hsl(120, 100%, 40%);">+                 }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (isvalue(cid) and isvalue(cid.ra_id)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    ret.rac := f_oct_or_wc(cid.ra_id.rac, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (isvalue(cid)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   ret.cI_value := f_oct_or_wc(cid.cell_id, 2);</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+             return ret;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) Cell_Identifier_V_GTPC ts_GTPC_Cell_Identifier_V(BssgpCellId cid) := {</span><br><span style="color: hsl(120, 100%, 40%);">+               mccDigit1 := cid.ra_id.lai.mcc_mnc[0],</span><br><span style="color: hsl(120, 100%, 40%);">+                mccDigit2 := cid.ra_id.lai.mcc_mnc[1],</span><br><span style="color: hsl(120, 100%, 40%);">+                mccDigit3 := cid.ra_id.lai.mcc_mnc[2],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit3 := cid.ra_id.lai.mcc_mnc[3],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit1 := cid.ra_id.lai.mcc_mnc[4],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit2 := cid.ra_id.lai.mcc_mnc[5],</span><br><span style="color: hsl(120, 100%, 40%);">+                lac := int2oct(cid.ra_id.lai.lac, 2),</span><br><span style="color: hsl(120, 100%, 40%);">+         rac := int2oct(cid.ra_id.rac, 1),</span><br><span style="color: hsl(120, 100%, 40%);">+             cI_value := int2oct(cid.cell_id, 2)</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     template RIM_Routing_Address_GTPC t_GTPC_RIM_Routing_Address_cid(BssgpCellId cid) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                 cell_Identifier := ts_GTPC_Cell_Identifier_V(cid)</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     function tr_GTPC_ENB_Identifier(template BssgpCellId cid, template integer tac, template octetstring gnbid) return template ENB_Identifier {</span><br><span style="color: hsl(120, 100%, 40%);">+          var template ENB_Identifier ret := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  mccDigit1 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                       mccDigit2 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                       mccDigit3 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                       mncDigit3 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                       mncDigit1 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                       mncDigit2 := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                       tAC := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                     globalENB_ID := ?</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (istemplatekind(cid, "omit") and istemplatekind(tac, "omit") and istemplatekind(gnbid, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    return omit;</span><br><span style="color: hsl(120, 100%, 40%);">+          } else if (istemplatekind(cid, "*") and istemplatekind(tac, "*") and istemplatekind(gnbid, "*")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      return *;</span><br><span style="color: hsl(120, 100%, 40%);">+             } else if (istemplatekind(cid, "?") and istemplatekind(tac, "?") and istemplatekind(gnbid, "?")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      return ?;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (isvalue(cid) and isvalue(cid.ra_id) and isvalue(cid.ra_id.lai)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (isvalue(cid.ra_id.lai.mcc_mnc)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                         ret.mccDigit1 := cid.ra_id.lai.mcc_mnc[0];</span><br><span style="color: hsl(120, 100%, 40%);">+                            ret.mccDigit2 := cid.ra_id.lai.mcc_mnc[1];</span><br><span style="color: hsl(120, 100%, 40%);">+                            ret.mccDigit3 := cid.ra_id.lai.mcc_mnc[2];</span><br><span style="color: hsl(120, 100%, 40%);">+                            ret.mncDigit3 := cid.ra_id.lai.mcc_mnc[3];</span><br><span style="color: hsl(120, 100%, 40%);">+                            ret.mncDigit1 := cid.ra_id.lai.mcc_mnc[4];</span><br><span style="color: hsl(120, 100%, 40%);">+                            ret.mncDigit2 := cid.ra_id.lai.mcc_mnc[5];</span><br><span style="color: hsl(120, 100%, 40%);">+                    }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (isvalue(tac)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   ret.tAC := int2oct(valueof(tac), 2);</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (isvalue(gnbid)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 ret.globalENB_ID := gnbid;</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           return ret;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) ENB_Identifier ts_GTPC_ENB_Identifier(BssgpCellId cid, integer tac, octetstring gnbid) := {</span><br><span style="color: hsl(120, 100%, 40%);">+          mccDigit1 := cid.ra_id.lai.mcc_mnc[0],</span><br><span style="color: hsl(120, 100%, 40%);">+                mccDigit2 := cid.ra_id.lai.mcc_mnc[1],</span><br><span style="color: hsl(120, 100%, 40%);">+                mccDigit3 := cid.ra_id.lai.mcc_mnc[2],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit3 := cid.ra_id.lai.mcc_mnc[3],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit1 := cid.ra_id.lai.mcc_mnc[4],</span><br><span style="color: hsl(120, 100%, 40%);">+                mncDigit2 := cid.ra_id.lai.mcc_mnc[5],</span><br><span style="color: hsl(120, 100%, 40%);">+                tAC := int2oct(tac, 2),</span><br><span style="color: hsl(120, 100%, 40%);">+               globalENB_ID := gnbid</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     template RIM_Routing_Address_GTPC t_GTPC_RIM_Routing_Address_enbid(BssgpCellId cid, integer tac, octetstring gnbid) := {</span><br><span style="color: hsl(120, 100%, 40%);">+               eNB_Identifier := ts_GTPC_ENB_Identifier(cid, tac, gnbid)</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     template RIM_Routing_Information_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+ tr_GTPC_RIM_Routing_Information(HEX1 addr_discr, template RIM_Routing_Address_GTPC addr) := {</span><br><span style="color: hsl(120, 100%, 40%);">+         iEI := '54'O,</span><br><span style="color: hsl(120, 100%, 40%);">+         ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                  lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                          length1 := ?</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            rIMRoutingAddressDiscriminator := addr_discr,</span><br><span style="color: hsl(120, 100%, 40%);">+         spare := '0'H,</span><br><span style="color: hsl(120, 100%, 40%);">+                rIM_Routing_Address := addr</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) RIM_Routing_Information_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_GTPC_RIM_Routing_Information(HEX1 addr_discr, template (value) RIM_Routing_Address_GTPC addr) := {</span><br><span style="color: hsl(120, 100%, 40%);">+         iEI := '54'O,</span><br><span style="color: hsl(120, 100%, 40%);">+         ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                  lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                          length1 := 0 /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+                },</span><br><span style="color: hsl(120, 100%, 40%);">+            rIMRoutingAddressDiscriminator := addr_discr,</span><br><span style="color: hsl(120, 100%, 40%);">+         spare := '0'H,</span><br><span style="color: hsl(120, 100%, 40%);">+                rIM_Routing_Address := addr</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* 3GPP TS 48.018 11.3.63.1.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+      template RAN_Information_Request_Application_Container_NACC_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+      tr_GTPC_RAN_Information_Request_Application_Container_NACC(template BssgpCellId cid) := {</span><br><span style="color: hsl(120, 100%, 40%);">+             iEI := '4D'O,</span><br><span style="color: hsl(120, 100%, 40%);">+         ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  length1 := ?</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            reporting_Cell_Identifier := tr_GTPC_Cell_Identifier_V(cid)</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) RAN_Information_Request_Application_Container_NACC_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+      ts_GTPC_RAN_Information_Request_Application_Container_NACC(BssgpCellId cid) := {</span><br><span style="color: hsl(120, 100%, 40%);">+              iEI := '4D'O,</span><br><span style="color: hsl(120, 100%, 40%);">+         ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  length1 := 0 /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+                },</span><br><span style="color: hsl(120, 100%, 40%);">+            reporting_Cell_Identifier := ts_GTPC_Cell_Identifier_V(cid)</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* 3GPP TS 48.018 11.3.63.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+        template RAN_Information_Request_Application_Container_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+   tru_GTPC_RAN_Information_Request_Application_Container_NACC(template BssgpCellId cid) := {</span><br><span style="color: hsl(120, 100%, 40%);">+            nacc := tr_GTPC_RAN_Information_Request_Application_Container_NACC(cid)</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) RAN_Information_Request_Application_Container_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+   tsu_GTPC_RAN_Information_Request_Application_Container_NACC(BssgpCellId cid) := {</span><br><span style="color: hsl(120, 100%, 40%);">+             nacc := ts_GTPC_RAN_Information_Request_Application_Container_NACC(cid)</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* 3GPP TS 48.018 11.3.63.2.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+      template RAN_Information_Application_Container_NACC_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+      tr_GTPC_RAN_Information_Application_Container_NACC(template BssgpCellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+            iEI := '4E'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                 ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                 length1 := ?</span><br><span style="color: hsl(120, 100%, 40%);">+           },</span><br><span style="color: hsl(120, 100%, 40%);">+            reporting_Cell_Identifier := tr_GTPC_Cell_Identifier_V(cid),</span><br><span style="color: hsl(120, 100%, 40%);">+          typeBit := bool2bit(psi_type),</span><br><span style="color: hsl(120, 100%, 40%);">+                number_of_SI_PSI := int2bit(si_psi_num, 7),</span><br><span style="color: hsl(120, 100%, 40%);">+           sI_PSI := si_psi</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) RAN_Information_Application_Container_NACC_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+      ts_GTPC_RAN_Information_Application_Container_NACC(BssgpCellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+             iEI := '4E'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                 ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                 length1 := 0 /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+                 },</span><br><span style="color: hsl(120, 100%, 40%);">+            reporting_Cell_Identifier := ts_GTPC_Cell_Identifier_V(cid),</span><br><span style="color: hsl(120, 100%, 40%);">+          typeBit := bool2bit(psi_type),</span><br><span style="color: hsl(120, 100%, 40%);">+                number_of_SI_PSI := int2bit(si_psi_num, 7),</span><br><span style="color: hsl(120, 100%, 40%);">+           sI_PSI := si_psi</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* RAN_Information_Request */</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) RAN_Information_Request_RIM_Container_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+   ts_GTPC_RAN_Information_Request_RIM_Container(template (value) RIM_Application_Identity_GTPC app_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                template (value) RIM_Sequence_Number_GTPC seq,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                template (value) RIM_PDU_Indications_GTPC ind,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                template (omit) RIM_Protocol_Version_Number_GTPC ver := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 template (omit) RAN_Information_Request_Application_Container_GTPC app_cont := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                  template (omit) SON_TransferApplicationIdentity son_app_id := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                iEI := '57'O,</span><br><span style="color: hsl(120, 100%, 40%);">+         ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  length1 := 0 /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+                },</span><br><span style="color: hsl(120, 100%, 40%);">+            rIM_Application_Identity := app_id,</span><br><span style="color: hsl(120, 100%, 40%);">+           rIM_Sequence_Number := seq,</span><br><span style="color: hsl(120, 100%, 40%);">+           rIM_PDU_Indications := ind,</span><br><span style="color: hsl(120, 100%, 40%);">+           rIM_Protocol_Version_Number := ver,</span><br><span style="color: hsl(120, 100%, 40%);">+           application_Container := app_cont,</span><br><span style="color: hsl(120, 100%, 40%);">+            sON_TransferApplicationIdentity := son_app_id</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) PDU_BSSGP_RAN_INFORMATION_REQUEST_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+       ts_GTPC_RAN_Information_Request(template (value) RIM_Routing_Information_GTPC dest,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   template (value) RIM_Routing_Information_GTPC src,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    template (value) RAN_Information_Request_RIM_Container_GTPC  cont) := {</span><br><span style="color: hsl(120, 100%, 40%);">+               bssgpPduType := '71'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                destination_Cell_Identifier := dest,</span><br><span style="color: hsl(120, 100%, 40%);">+          source_Cell_Identifier := src,</span><br><span style="color: hsl(120, 100%, 40%);">+                rIM_Container := cont</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) RANTransparentContainer ts_RANTransparentContainer_RAN_INFO_REQ(template (value) PDU_BSSGP_RAN_INFORMATION_REQUEST_GTPC pdu) := {</span><br><span style="color: hsl(120, 100%, 40%);">+            type_gtpc := '90'O,</span><br><span style="color: hsl(120, 100%, 40%);">+           lengthf := 0, /* FIXME */</span><br><span style="color: hsl(120, 100%, 40%);">+             rANTransparentContainerField := {</span><br><span style="color: hsl(120, 100%, 40%);">+                     pDU_BSSGP_RAN_INFORMATION_REQUEST := pdu</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* RAN_Information */</span><br><span style="color: hsl(120, 100%, 40%);">+ template ApplContainer_or_ApplErrContainer_NACC_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+  tru_GTPC_ApplContainer_NACC(BssgpCellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+           application_Container := tr_GTPC_RAN_Information_Application_Container_NACC(cid, psi_type, si_psi_num, si_psi)</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) ApplContainer_or_ApplErrContainer_NACC_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+  tsu_GTPC_ApplContainer_NACC(BssgpCellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+           application_Container := ts_GTPC_RAN_Information_Application_Container_NACC(cid, psi_type, si_psi_num, si_psi)</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     template ApplContainer_or_ApplErrContainer_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+       tru_GTPC_ApplContainer_or_ApplErrContainer_NACC(template ApplContainer_or_ApplErrContainer_NACC_GTPC cont) := {</span><br><span style="color: hsl(120, 100%, 40%);">+               nacc := cont</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) ApplContainer_or_ApplErrContainer_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+       tsu_GTPC_ApplContainer_or_ApplErrContainer_NACC(template (value) ApplContainer_or_ApplErrContainer_NACC_GTPC cont) := {</span><br><span style="color: hsl(120, 100%, 40%);">+               nacc := cont</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     template RAN_Information_RIM_Container_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+   tr_GTPC_RAN_Information_RIM_Container(template RIM_Application_Identity_GTPC app_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        template RIM_Sequence_Number_GTPC seq,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        template RIM_PDU_Indications_GTPC ind,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        template RIM_Protocol_Version_Number_GTPC ver := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        template ApplContainer_or_ApplErrContainer_GTPC app_cont := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                             template SON_TransferApplicationIdentity son_app_id := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+               iEI := '58'O,</span><br><span style="color: hsl(120, 100%, 40%);">+         ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  length1 := ?</span><br><span style="color: hsl(120, 100%, 40%);">+          },</span><br><span style="color: hsl(120, 100%, 40%);">+            rIM_Application_Identity := app_id,</span><br><span style="color: hsl(120, 100%, 40%);">+           rIM_Sequence_Number := seq,</span><br><span style="color: hsl(120, 100%, 40%);">+           rIM_PDU_Indications := ind,</span><br><span style="color: hsl(120, 100%, 40%);">+           rIM_Protocol_Version_Number := ver,</span><br><span style="color: hsl(120, 100%, 40%);">+           applContainer_or_ApplErrContainer := app_cont,</span><br><span style="color: hsl(120, 100%, 40%);">+                sON_TransferApplicationIdentity := son_app_id</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) RAN_Information_RIM_Container_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+   ts_GTPC_RAN_Information_RIM_Container(template (value) RIM_Application_Identity_GTPC app_id,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                template (value) RIM_Sequence_Number_GTPC seq,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                template (value) RIM_PDU_Indications_GTPC ind,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                template (omit) RIM_Protocol_Version_Number_GTPC ver := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 template (omit) ApplContainer_or_ApplErrContainer_GTPC app_cont := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                      template (omit) SON_TransferApplicationIdentity son_app_id := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                iEI := '58'O,</span><br><span style="color: hsl(120, 100%, 40%);">+         ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  length1 := 0 /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+                },</span><br><span style="color: hsl(120, 100%, 40%);">+            rIM_Application_Identity := app_id,</span><br><span style="color: hsl(120, 100%, 40%);">+           rIM_Sequence_Number := seq,</span><br><span style="color: hsl(120, 100%, 40%);">+           rIM_PDU_Indications := ind,</span><br><span style="color: hsl(120, 100%, 40%);">+           rIM_Protocol_Version_Number := ver,</span><br><span style="color: hsl(120, 100%, 40%);">+           applContainer_or_ApplErrContainer := app_cont,</span><br><span style="color: hsl(120, 100%, 40%);">+                sON_TransferApplicationIdentity := son_app_id</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     template PDU_BSSGP_RAN_INFORMATION_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+       tr_GTPC_RAN_Information(template RIM_Routing_Information_GTPC dest,</span><br><span style="color: hsl(120, 100%, 40%);">+                           template RIM_Routing_Information_GTPC src,</span><br><span style="color: hsl(120, 100%, 40%);">+                            template RAN_Information_RIM_Container_GTPC cont) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                bssgpPduType := '70'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                destination_Cell_Identifier := dest,</span><br><span style="color: hsl(120, 100%, 40%);">+          source_Cell_Identifier := src,</span><br><span style="color: hsl(120, 100%, 40%);">+                rIM_Container := cont</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) PDU_BSSGP_RAN_INFORMATION_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+       ts_GTPC_RAN_Information(template (value) RIM_Routing_Information_GTPC dest,</span><br><span style="color: hsl(120, 100%, 40%);">+                           template (value) RIM_Routing_Information_GTPC src,</span><br><span style="color: hsl(120, 100%, 40%);">+                            template (value) RAN_Information_RIM_Container_GTPC cont) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                bssgpPduType := '70'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                destination_Cell_Identifier := dest,</span><br><span style="color: hsl(120, 100%, 40%);">+          source_Cell_Identifier := src,</span><br><span style="color: hsl(120, 100%, 40%);">+                rIM_Container := cont</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     template RANTransparentContainer tr_RANTransparentContainer_RAN_INFO(template PDU_BSSGP_RAN_INFORMATION_GTPC pdu) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                type_gtpc := '90'O,</span><br><span style="color: hsl(120, 100%, 40%);">+           lengthf := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+         rANTransparentContainerField := {</span><br><span style="color: hsl(120, 100%, 40%);">+                     pDU_BSSGP_RAN_INFORMATION := pdu</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) RANTransparentContainer ts_RANTransparentContainer_RAN_INFO(template (value) PDU_BSSGP_RAN_INFORMATION_GTPC pdu) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                type_gtpc := '90'O,</span><br><span style="color: hsl(120, 100%, 40%);">+           lengthf := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+               rANTransparentContainerField := {</span><br><span style="color: hsl(120, 100%, 40%);">+                     pDU_BSSGP_RAN_INFORMATION := pdu</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   template RANTransparentContainer tr_RANTransparentContainer(template RANTransparentContainerField rANTransparentContainerField) := {</span><br><span style="color: hsl(120, 100%, 40%);">+          type_gtpc := '90'O,</span><br><span style="color: hsl(120, 100%, 40%);">+           lengthf := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+         rANTransparentContainerField := rANTransparentContainerField</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) RANTransparentContainer ts_RANTransparentContainer(template (value) RANTransparentContainerField rANTransparentContainerField) := {</span><br><span style="color: hsl(120, 100%, 40%);">+          type_gtpc := '90'O,</span><br><span style="color: hsl(120, 100%, 40%);">+           lengthf := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+               rANTransparentContainerField := rANTransparentContainerField</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     template GTPC_PDUs tr_RANInfoRelay(template RANTransparentContainer transparentContainer) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                ranInformationRelay := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      transparentContainer := transparentContainer,</span><br><span style="color: hsl(120, 100%, 40%);">+                 rIM_RoutingAddress := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                      rIM_RoutingAddress_Discriminator := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                        private_extension_gtpc := *</span><br><span style="color: hsl(120, 100%, 40%);">+           }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) GTPC_PDUs ts_RANInfoRelay(template (value) RANTransparentContainer transparentContainer) := {</span><br><span style="color: hsl(120, 100%, 40%);">+                ranInformationRelay := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      transparentContainer := transparentContainer,</span><br><span style="color: hsl(120, 100%, 40%);">+                 rIM_RoutingAddress := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                   rIM_RoutingAddress_Discriminator := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                     private_extension_gtpc := omit</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     template Gtp1cUnitdata</span><br><span style="color: hsl(120, 100%, 40%);">+        tr_GTPC_RANInfoRelay(template GtpPeer peer,</span><br><span style="color: hsl(120, 100%, 40%);">+                        template RANTransparentContainer transparentContainer) := {</span><br><span style="color: hsl(120, 100%, 40%);">+              peer := peer,</span><br><span style="color: hsl(120, 100%, 40%);">+         gtpc := tr_GTP1C_PDU(rANInformationRelay, '00000000'O, tr_RANInfoRelay(transparentContainer))</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     template (value) Gtp1cUnitdata</span><br><span style="color: hsl(120, 100%, 40%);">+        ts_GTPC_RANInfoRelay(template (value) GtpPeer peer,</span><br><span style="color: hsl(120, 100%, 40%);">+                        template (value) RANTransparentContainer transparentContainer) := {</span><br><span style="color: hsl(120, 100%, 40%);">+              peer := peer,</span><br><span style="color: hsl(120, 100%, 40%);">+         gtpc := ts_GTP1C_PDU(rANInformationRelay, '00000000'O, valueof(ts_RANInfoRelay(transparentContainer)), 0)</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ template RAN_Information_Request_RIM_Container_GTPC</span><br><span style="color: hsl(120, 100%, 40%);">+   tr_GTPC_RAN_Information_Request_RIM_Container(template RIM_Application_Identity_GTPC app_id := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template RIM_Sequence_Number_GTPC seq := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template RIM_PDU_Indications_GTPC ind := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template RIM_Protocol_Version_Number_GTPC ver := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   template RAN_Information_Request_Application_Container_GTPC app_cont := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    template SON_TransferApplicationIdentity son_app_id := *) := {</span><br><span style="color: hsl(120, 100%, 40%);">+           iEI := '57'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                 ext := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+          lengthIndicator := {</span><br><span style="color: hsl(120, 100%, 40%);">+                 length1 := ?</span><br><span style="color: hsl(120, 100%, 40%);">+           },</span><br><span style="color: hsl(120, 100%, 40%);">+            rIM_Application_Identity := app_id,</span><br><span style="color: hsl(120, 100%, 40%);">+           rIM_Sequence_Number := seq,</span><br><span style="color: hsl(120, 100%, 40%);">+           rIM_PDU_Indications := ind,</span><br><span style="color: hsl(120, 100%, 40%);">+           rIM_Protocol_Version_Number := ver,</span><br><span style="color: hsl(120, 100%, 40%);">+           application_Container := app_cont,</span><br><span style="color: hsl(120, 100%, 40%);">+            sON_TransferApplicationIdentity := son_app_id</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span>        /* GTP-U */</span><br><span> </span><br><span>diff --git a/pgw/gen_links.sh b/pgw/gen_links.sh</span><br><span>index a0f1281..b061fea 100755</span><br><span>--- a/pgw/gen_links.sh</span><br><span>+++ b/pgw/gen_links.sh</span><br><span>@@ -32,6 +32,14 @@</span><br><span> FILES="UDP_EncDec.cc  UDP_Types.ttcn"</span><br><span> gen_links $DIR $FILES</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.ProtocolModules.NS_v7.3.0/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="NS_Types.ttcn"</span><br><span style="color: hsl(120, 100%, 40%);">+gen_links $DIR $FILES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DIR=$BASEDIR/titan.ProtocolModules.BSSGP_v13.0.0/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="BSSGP_EncDec.cc  BSSGP_Types.ttcn"</span><br><span style="color: hsl(120, 100%, 40%);">+gen_links $DIR $FILES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> DIR=$BASEDIR/titan.ProtocolModules.GTP_v13.5.0/src</span><br><span> FILES="GTPC_EncDec.cc  GTPC_Types.ttcn  GTPU_EncDec.cc  GTPU_Types.ttcn"</span><br><span> gen_links $DIR $FILES</span><br><span>@@ -50,7 +58,7 @@</span><br><span> </span><br><span> DIR=../library</span><br><span> FILES="Misc_Helpers.ttcn General_Types.ttcn GSM_Types.ttcn Osmocom_Types.ttcn Native_Functions.ttcn Native_FunctionDefs.cc IPCP_Types.ttcn PAP_Types.ttcn "</span><br><span style="color: hsl(0, 100%, 40%);">-FILES+="GTP_CodecPort.ttcn GTP_CodecPort_CtrlFunct.ttcn GTP_CodecPort_CtrlFunctDef.cc GTP_Templates.ttcn "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="GTP_CodecPort.ttcn GTP_CodecPort_CtrlFunct.ttcn GTP_CodecPort_CtrlFunctDef.cc GTP_Templates.ttcn Osmocom_Gb_Types.ttcn "</span><br><span> FILES+="GTPv2_PrivateExtensions.ttcn GTPv2_Templates.ttcn "</span><br><span> FILES+="GTPv2_CodecPort.ttcn GTPv2_CodecPort_CtrlFunctDef.cc GTPv2_CodecPort_CtrlFunct.ttcn GTPv2_Emulation.ttcn "</span><br><span> FILES+="DNS_Helpers.ttcn "</span><br><span>diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn</span><br><span>index dded390..d760e58 100644</span><br><span>--- a/sgsn/SGSN_Tests.ttcn</span><br><span>+++ b/sgsn/SGSN_Tests.ttcn</span><br><span>@@ -66,6 +66,7 @@</span><br><span>  integer mp_hlr_port := 4222;</span><br><span>         charstring mp_ggsn_ip := "127.0.0.103";</span><br><span>    integer mp_echo_interval := 5; /* in seconds. Only used in test enabling g_use_echo  */</span><br><span style="color: hsl(120, 100%, 40%);">+       charstring mp_sgsn_gtp_ip := "127.0.0.10";</span><br><span> </span><br><span>     NSConfigurations mp_nsconfig := {</span><br><span>            {</span><br><span>@@ -179,6 +180,7 @@</span><br><span> </span><br><span>  /* used by RIM related test */</span><br><span>       port BSSGP_PT RIM[NUM_GB];</span><br><span style="color: hsl(120, 100%, 40%);">+    port GTPEM_PT GTPC;</span><br><span> </span><br><span>      var GTP_Emulation_CT vc_GTP;</span><br><span> </span><br><span>@@ -225,6 +227,12 @@</span><br><span>      SCCP_PAR_Address sccp_addr_peer optional</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Passed in RAN-INFO message from emulated neighbor using RIM */</span><br><span style="color: hsl(120, 100%, 40%);">+const octetstring si1_default := '198fb100000000000000000000000000007900002b'O;</span><br><span style="color: hsl(120, 100%, 40%);">+const octetstring si3_default := '1b753000f110236ec9033c2747407900003c0b2b2b'O;</span><br><span style="color: hsl(120, 100%, 40%);">+const octetstring si13_default := '009000185a6fc9e08410ab2b2b2b2b2b2b2b2b2b2b'O;</span><br><span style="color: hsl(120, 100%, 40%);">+const octetstring si_default := si1_default & si3_default & si13_default;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_cellid_to_RAI(in BssgpCellId cell_id) return RoutingAreaIdentificationV {</span><br><span>       /* mcc_mnc is encoded as of 24.008 10.5.5.15 */</span><br><span>      var BcdMccMnc mcc_mnc := cell_id.ra_id.lai.mcc_mnc;</span><br><span>@@ -3207,16 +3215,11 @@</span><br><span> </span><br><span>    /* Now also emulate also the response as well and send it back on GB interface #1. Expect the result on</span><br><span>       * GB interface #0 */</span><br><span style="color: hsl(0, 100%, 40%);">-   var octetstring si1 := '198fb100000000000000000000000000007900002b'O;</span><br><span style="color: hsl(0, 100%, 40%);">-   var octetstring si3 := '1b753000f110236ec9033c2747407900003c0b2b2b'O;</span><br><span style="color: hsl(0, 100%, 40%);">-   var octetstring si13 := '009000185a6fc9e08410ab2b2b2b2b2b2b2b2b2b2b'O;</span><br><span style="color: hsl(0, 100%, 40%);">-  var octetstring si := si1 & si3 & si13;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>      res_cont := ts_RAN_Information_RIM_Container(ts_RIM_Application_Identity(RIM_APP_ID_NACC),</span><br><span>                                                ts_RIM_Sequence_Number(2),</span><br><span>                                                   ts_RIM_PDU_Indications(false, RIM_PDU_TYPE_SING_REP),</span><br><span>                                                ts_RIM_Protocol_Version_Number(1),</span><br><span style="color: hsl(0, 100%, 40%);">-                                              tsu_ApplContainer_or_ApplErrContainer_NACC(tsu_ApplContainer_NACC(g_gb[0].cfg.bvc[0].cell_id, false, 3, si)),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 tsu_ApplContainer_or_ApplErrContainer_NACC(tsu_ApplContainer_NACC(g_gb[0].cfg.bvc[0].cell_id, false, 3, si_default)),</span><br><span>                                                omit);</span><br><span>  bssgp_rim_pdu := ts_PDU_BSSGP_RAN_INFORMATION(ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, src_addr),</span><br><span>                                                                      ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, dst_addr),</span><br><span>@@ -3242,6 +3245,108 @@</span><br><span>  f_cleanup();</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_rim_eutran_to_geran() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var BSSGP_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init();</span><br><span style="color: hsl(120, 100%, 40%);">+     /* connect RIM related port */</span><br><span style="color: hsl(120, 100%, 40%);">+        connect(vc_GTP:CLIENT_DEFAULT, self:GTPC);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  var GtpPeer peer := {</span><br><span style="color: hsl(120, 100%, 40%);">+         connId := 1,</span><br><span style="color: hsl(120, 100%, 40%);">+          remName := mp_sgsn_gtp_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+            remPort := GTP1C_PORT</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   var template (value) RIM_Routing_Address_GTPC gtpc_dst_addr, gtpc_src_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+   var template (value) RAN_Information_Request_RIM_Container_GTPC gtpc_rim_req_cont;</span><br><span style="color: hsl(120, 100%, 40%);">+    var template (value) PDU_BSSGP_RAN_INFORMATION_REQUEST_GTPC gtpc_bssgp_cont;</span><br><span style="color: hsl(120, 100%, 40%);">+  var template (value) Gtp1cUnitdata gtpc_pdu;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        gtpc_dst_addr := t_GTPC_RIM_Routing_Address_cid(g_gb[1].cfg.bvc[0].cell_id);</span><br><span style="color: hsl(120, 100%, 40%);">+  gtpc_src_addr := t_GTPC_RIM_Routing_Address_enbid(g_gb[1].cfg.bvc[0].cell_id, tac := 3, gnbid := '12345678123456'O);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        gtpc_rim_req_cont := ts_GTPC_RAN_Information_Request_RIM_Container(ts_GTPC_RIM_Application_Identity(RIM_APP_ID_NACC),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                 ts_GTPC_RIM_Sequence_Number(1),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                       ts_GTPC_RIM_PDU_Indications(false, RIM_PDU_TYPE_SING_REP),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                    ts_GTPC_RIM_Protocol_Version_Number(1),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                       tsu_GTPC_RAN_Information_Request_Application_Container_NACC(g_gb[1].cfg.bvc[0].cell_id),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                                      omit);</span><br><span style="color: hsl(120, 100%, 40%);">+        gtpc_bssgp_cont := ts_GTPC_RAN_Information_Request(ts_GTPC_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, gtpc_dst_addr),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                       ts_GTPC_RIM_Routing_Information(RIM_ADDR_EUTRAN_NODEB_ID, gtpc_src_addr),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     gtpc_rim_req_cont);</span><br><span style="color: hsl(120, 100%, 40%);">+        gtpc_pdu := ts_GTPC_RANInfoRelay(peer, ts_RANTransparentContainer_RAN_INFO_REQ(gtpc_bssgp_cont));</span><br><span style="color: hsl(120, 100%, 40%);">+     GTPC.send(gtpc_pdu);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        var template RIM_Routing_Address bssgp_dst_addr, bssgp_src_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+      var template PDU_BSSGP bssgp_rim_pdu_expect;</span><br><span style="color: hsl(120, 100%, 40%);">+  bssgp_dst_addr := t_RIM_Routing_Address_cid(g_gb[1].cfg.bvc[0].cell_id);</span><br><span style="color: hsl(120, 100%, 40%);">+      bssgp_src_addr := t_RIM_Routing_Address_enbid(g_gb[1].cfg.bvc[0].cell_id, tac := 3, gnbid := '12345678123456'O);</span><br><span style="color: hsl(120, 100%, 40%);">+      bssgp_rim_pdu_expect := tr_RAN_INFORMATION_REQUEST(tr_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, bssgp_dst_addr),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                           tr_RIM_Routing_Information(RIM_ADDR_EUTRAN_NODEB_ID, bssgp_src_addr),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                         tr_RAN_Information_Request_RIM_Container);</span><br><span style="color: hsl(120, 100%, 40%);">+ timer T := 2.0;</span><br><span style="color: hsl(120, 100%, 40%);">+       T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] RIM[1].receive(bssgp_rim_pdu_expect) {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+             T.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] RIM[1].receive {</span><br><span style="color: hsl(120, 100%, 40%);">+           setverdict(fail, "Unexpected BSSGP RIM PDU received");</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "No BSSGP RIM PDU received");</span><br><span style="color: hsl(120, 100%, 40%);">+              mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Now also emulate also the response as well and send it back on GB</span><br><span style="color: hsl(120, 100%, 40%);">+     interface #1. Expect the result on * GTPC */</span><br><span style="color: hsl(120, 100%, 40%);">+       var template RAN_Information_RIM_Container res_cont;</span><br><span style="color: hsl(120, 100%, 40%);">+  var template PDU_BSSGP bssgp_rim_pdu;</span><br><span style="color: hsl(120, 100%, 40%);">+ res_cont := ts_RAN_Information_RIM_Container(ts_RIM_Application_Identity(RIM_APP_ID_NACC),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 ts_RIM_Sequence_Number(2),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    ts_RIM_PDU_Indications(false, RIM_PDU_TYPE_SING_REP),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 ts_RIM_Protocol_Version_Number(1),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    tsu_ApplContainer_or_ApplErrContainer_NACC(tsu_ApplContainer_NACC(g_gb[1].cfg.bvc[0].cell_id, false, 3, si_default)),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 omit);</span><br><span style="color: hsl(120, 100%, 40%);">+   bssgp_rim_pdu := ts_PDU_BSSGP_RAN_INFORMATION(ts_RIM_Routing_Information(RIM_ADDR_EUTRAN_NODEB_ID, bssgp_src_addr),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                 ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, bssgp_dst_addr),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                   res_cont);</span><br><span style="color: hsl(120, 100%, 40%);">+      RIM[1].send(bssgp_rim_pdu);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ var template RAN_Information_RIM_Container_GTPC rim_cont;</span><br><span style="color: hsl(120, 100%, 40%);">+     var template PDU_BSSGP_RAN_INFORMATION_GTPC gtpc_bssgp_cont_ack;</span><br><span style="color: hsl(120, 100%, 40%);">+      var template Gtp1cUnitdata gtpc_pdu_exp;</span><br><span style="color: hsl(120, 100%, 40%);">+      rim_cont := tr_GTPC_RAN_Information_RIM_Container(ts_GTPC_RIM_Application_Identity(RIM_APP_ID_NACC),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    ts_GTPC_RIM_Sequence_Number(2),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                       ts_GTPC_RIM_PDU_Indications(false, RIM_PDU_TYPE_SING_REP),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                    ts_GTPC_RIM_Protocol_Version_Number(1),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                       tru_GTPC_ApplContainer_or_ApplErrContainer_NACC(tru_GTPC_ApplContainer_NACC(g_gb[1].cfg.bvc[0].cell_id, false, 3, si_default)),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                       omit);</span><br><span style="color: hsl(120, 100%, 40%);">+      gtpc_bssgp_cont_ack := tr_GTPC_RAN_Information(tr_GTPC_RIM_Routing_Information(RIM_ADDR_EUTRAN_NODEB_ID, gtpc_src_addr),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     tr_GTPC_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, gtpc_dst_addr),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                       rim_cont);</span><br><span style="color: hsl(120, 100%, 40%);">+     gtpc_pdu_exp := tr_GTPC_RANInfoRelay(peer, tr_RANTransparentContainer_RAN_INFO(gtpc_bssgp_cont_ack));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] GTPC.receive(gtpc_pdu_exp) {</span><br><span style="color: hsl(120, 100%, 40%);">+               setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+             T.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] GTPC.receive {</span><br><span style="color: hsl(120, 100%, 40%);">+             setverdict(fail, "Unexpected GTPC RIM PDU received");</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail, "No GTPC RIM PDU received");</span><br><span style="color: hsl(120, 100%, 40%);">+               mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_cleanup();</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Test if the SGSN routes traffic to new cell after the MS attached to it */</span><br><span> private function f_TC_cell_change_different_rai_ci_attach(charstring id) runs on BSSGP_ConnHdlr {</span><br><span>      var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip));</span><br><span>@@ -3436,6 +3541,7 @@</span><br><span>   execute( TC_paging_ps() );</span><br><span> </span><br><span>       execute( TC_bssgp_rim_single_report() );</span><br><span style="color: hsl(120, 100%, 40%);">+      execute( TC_rim_eutran_to_geran() );</span><br><span> </span><br><span>     execute( TC_cell_change_different_rai_ci_attach() );</span><br><span>         execute( TC_cell_change_different_rai_ci_data() );</span><br><span>diff --git a/sgsn/osmo-sgsn.cfg b/sgsn/osmo-sgsn.cfg</span><br><span>index 082a353..7941007 100644</span><br><span>--- a/sgsn/osmo-sgsn.cfg</span><br><span>+++ b/sgsn/osmo-sgsn.cfg</span><br><span>@@ -101,3 +101,6 @@</span><br><span>  timer t3397 8</span><br><span>  no compression rfc1144</span><br><span>  no compression v42bis</span><br><span style="color: hsl(120, 100%, 40%);">+ mme test-mme0</span><br><span style="color: hsl(120, 100%, 40%);">+  gtp remote-ip 127.0.0.103</span><br><span style="color: hsl(120, 100%, 40%);">+  gtp ran-info-relay 262 42 3</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/24129">change 24129</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/24129"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I9dcf6ee2dc55bc6aba178eca30080233254f025e </div>
<div style="display:none"> Gerrit-Change-Number: 24129 </div>
<div style="display:none"> Gerrit-PatchSet: 8 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>