<p>laforge <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/15204">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;">mme: Add GTPv2 support<br><br>this includes a GTPv2_CodecPort (for the usual transcoding)<br>as wella as an empty GTPv2_PrivateExtensions.ttcn without which<br>the TITAN GTPv2 ProtocolModule won't compile.<br><br>Change-Id: I1c1b8409077103dd4e64e467d21d33d8c9c4ac95<br>---<br>A library/GTPv2_CodecPort.ttcn<br>A library/GTPv2_PrivateExtensions.ttcn<br>A library/GTPv2_Templates.ttcn<br>M mme/gen_links.sh<br>M mme/regen_makefile.sh<br>5 files changed, 411 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/GTPv2_CodecPort.ttcn b/library/GTPv2_CodecPort.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..1f08f19</span><br><span>--- /dev/null</span><br><span>+++ b/library/GTPv2_CodecPort.ttcn</span><br><span>@@ -0,0 +1,57 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* dual-faced port sitting on top of IPL4_asp UDP to encode/decode GTPv2C</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2019 Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(120, 100%, 40%);">+ * All rights reserved.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Released under the terms of GNU General Public License, Version 2 or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * SPDX-License-Identifier: GPL-2.0-or-later</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%);">+module GTPv2_CodecPort {</span><br><span style="color: hsl(120, 100%, 40%);">+      import from IPL4asp_PortType all;</span><br><span style="color: hsl(120, 100%, 40%);">+     import from IPL4asp_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+        import from GTPv2C_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* identifies a remote peer (sender or receiver) */</span><br><span style="color: hsl(120, 100%, 40%);">+   type record GtpPeer {</span><br><span style="color: hsl(120, 100%, 40%);">+         ConnectionId    connId,</span><br><span style="color: hsl(120, 100%, 40%);">+               HostName        remName,</span><br><span style="color: hsl(120, 100%, 40%);">+              PortNumber      remPort</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%);">+   /* Decoded GTP2C (Control Plane), used in send and receive direction */</span><br><span style="color: hsl(120, 100%, 40%);">+       type record Gtp2cUnitdata {</span><br><span style="color: hsl(120, 100%, 40%);">+           GtpPeer         peer,</span><br><span style="color: hsl(120, 100%, 40%);">+         PDU_GTPCv2      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%);">+   /* Translation port on top of IPL4asp; ASP_Event passed through transparently */</span><br><span style="color: hsl(120, 100%, 40%);">+      type port GTPv2C_PT message {</span><br><span style="color: hsl(120, 100%, 40%);">+         out     Gtp2cUnitdata;</span><br><span style="color: hsl(120, 100%, 40%);">+                in      Gtp2cUnitdata,</span><br><span style="color: hsl(120, 100%, 40%);">+                        ASP_ConnId_ReadyToRelease,</span><br><span style="color: hsl(120, 100%, 40%);">+                    ASP_Event;</span><br><span style="color: hsl(120, 100%, 40%);">+    } with { extension "user IPL4asp_PT</span><br><span style="color: hsl(120, 100%, 40%);">+              out(Gtp2cUnitdata -> ASP_SendTo: function(f_enc_Gtp2cUD))</span><br><span style="color: hsl(120, 100%, 40%);">+          in(ASP_Recv>From -> Gtp2cUnitdata: function(f_dec_Gtp2cUD);</span><br><span style="color: hsl(120, 100%, 40%);">+                ASP_ConnId_ReadyToRelease -> ASP_ConnId_ReadyToRelease: simple;</span><br><span style="color: hsl(120, 100%, 40%);">+            ASP_Event -> ASP_Event: simple)" }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       private function f_enc_Gtp2cUD(in Gtp2cUnitdata in_ud, out ASP_SendTo out_ud) {</span><br><span style="color: hsl(120, 100%, 40%);">+               out_ud.connId := in_ud.peer.connId;</span><br><span style="color: hsl(120, 100%, 40%);">+           out_ud.remName := in_ud.peer.remName;</span><br><span style="color: hsl(120, 100%, 40%);">+         out_ud.remPort := in_ud.peer.remPort;</span><br><span style="color: hsl(120, 100%, 40%);">+         out_ud.proto := { udp := {} };</span><br><span style="color: hsl(120, 100%, 40%);">+                out_ud.msg := enc_PDU_GTPCv2(in_ud.gtpc);</span><br><span style="color: hsl(120, 100%, 40%);">+     } with { extension "prototype(fast)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   private function f_dec_Gtp2cUD(in ASP_RecvFrom in_ud, out Gtp2cUnitdata out_ud) {</span><br><span style="color: hsl(120, 100%, 40%);">+             out_ud.peer.connId := in_ud.connId;</span><br><span style="color: hsl(120, 100%, 40%);">+           out_ud.peer.remName := in_ud.remName;</span><br><span style="color: hsl(120, 100%, 40%);">+         out_ud.peer.remPort := in_ud.remPort;</span><br><span style="color: hsl(120, 100%, 40%);">+         out_ud.gtpc := dec_PDU_GTPCv2(in_ud.msg);</span><br><span style="color: hsl(120, 100%, 40%);">+     } with { extension "prototype(fast)" };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/library/GTPv2_PrivateExtensions.ttcn b/library/GTPv2_PrivateExtensions.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..63552f2</span><br><span>--- /dev/null</span><br><span>+++ b/library/GTPv2_PrivateExtensions.ttcn</span><br><span>@@ -0,0 +1,21 @@</span><br><span style="color: hsl(120, 100%, 40%);">+module GTPv2_PrivateExtensions {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* This is a small stub module to make GTPv2_Types.ttcn from</span><br><span style="color: hsl(120, 100%, 40%);">+ * titan.ProtocolModules.GTPv2_v13.7.0 compile */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import from General_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+type record PrivateExtension {</span><br><span style="color: hsl(120, 100%, 40%);">+    OCT1            elementIdentifier,</span><br><span style="color: hsl(120, 100%, 40%);">+    LIN2_BO_LAST    lengthIndicator,</span><br><span style="color: hsl(120, 100%, 40%);">+      BIT4            instance,</span><br><span style="color: hsl(120, 100%, 40%);">+     BIT4            spare,</span><br><span style="color: hsl(120, 100%, 40%);">+        octetstring     data</span><br><span style="color: hsl(120, 100%, 40%);">+} with {</span><br><span style="color: hsl(120, 100%, 40%);">+        variant (lengthIndicator) "LENGTHTO(data)";</span><br><span style="color: hsl(120, 100%, 40%);">+ variant "PRESENCE (elementIdentifier = 'FE'O; )"</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%);">+type record of PrivateExtension PrivateExtension_List;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+} with{ encode "RAW" }</span><br><span>diff --git a/library/GTPv2_Templates.ttcn b/library/GTPv2_Templates.ttcn</span><br><span>new file mode 100644</span><br><span>index 0000000..23b0053</span><br><span>--- /dev/null</span><br><span>+++ b/library/GTPv2_Templates.ttcn</span><br><span>@@ -0,0 +1,323 @@</span><br><span style="color: hsl(120, 100%, 40%);">+module GTPv2_Templates {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2019 by Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(120, 100%, 40%);">+ * All rights reserved.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Released under the terms of GNU General Public License, Version 2 or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * SPDX-License-Identifier: GPL-2.0-or-later</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%);">+import from General_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from Osmocom_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from GTPv2_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+private function fs_GTP2C_t_bit(template (omit) OCT4 teid) return BIT1 {</span><br><span style="color: hsl(120, 100%, 40%);">+        if (istemplatekind(teid, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+         return '0'B;</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              return '1'B;</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%);">+private function fs_GTP2C_p_bit(template (omit) PDU_GTPCv2 piggyback) return BIT1 {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (istemplatekind(piggyback, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+            return '0'B;</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              return '1'B;</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 (present) PDU_GTPCv2 tr_PDU_GTP2C(template OCT4 teid := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      template (present) GTPCv2_PDUs pdus := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     template PDU_GTPCv2 piggyback := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        spare := '000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+      t_Bit := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+   p_Bit := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+   version := '010'B,</span><br><span style="color: hsl(120, 100%, 40%);">+    messageType := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+     lengthf := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ tEID := teid,</span><br><span style="color: hsl(120, 100%, 40%);">+ sequenceNumber := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+  spare3 := '00'O,</span><br><span style="color: hsl(120, 100%, 40%);">+      gtpcv2_pdu := pdus,</span><br><span style="color: hsl(120, 100%, 40%);">+   piggybackPDU_GTPCv2 := piggyback</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%);">+/* 8.3 */</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) IMSI ts_GTP2C_Imsi(template (value) hexstring imsi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ elementIdentifier := '01'O,</span><br><span style="color: hsl(120, 100%, 40%);">+   lengthIndicator := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+       instance := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+  spare := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+     iMSI_Value := imsi</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) IMSI tr_GTP2C_Imsi(template (present) hexstring imsi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+  elementIdentifier := '01'O,</span><br><span style="color: hsl(120, 100%, 40%);">+   lengthIndicator := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ instance := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+        spare := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+     iMSI_Value := imsi</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%);">+/* 8.4-1 */</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+type enumerated GTP2C_Cause {</span><br><span style="color: hsl(120, 100%, 40%);">+       Local_Detach                            (2),</span><br><span style="color: hsl(120, 100%, 40%);">+  Complete_Detach                         (3),</span><br><span style="color: hsl(120, 100%, 40%);">+  RAT_changed_from_3GPP_to_Non_3GPP       (4),</span><br><span style="color: hsl(120, 100%, 40%);">+  ISR_deactivation                        (5),</span><br><span style="color: hsl(120, 100%, 40%);">+  Error_Ind_from_RNC_eNB_SGSN_MME         (5),</span><br><span style="color: hsl(120, 100%, 40%);">+  IMSI_Detach_Only                        (7),</span><br><span style="color: hsl(120, 100%, 40%);">+  Reactivation_Required                   (8),</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%);">+const integer c_GTP2C_Cause_LocalDetach := 1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* 8.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) Cause ts_GTP2C_Cause(template (value) OCT1 cause,</span><br><span style="color: hsl(120, 100%, 40%);">+                               template (value) BIT1 cs) := {</span><br><span style="color: hsl(120, 100%, 40%);">+  elementIdentifier := '02'O,</span><br><span style="color: hsl(120, 100%, 40%);">+   lengthIndicator := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+       instance := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+  spare := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+     causeValue := cause,</span><br><span style="color: hsl(120, 100%, 40%);">+  cS := cs,</span><br><span style="color: hsl(120, 100%, 40%);">+     bCE := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+  pCE := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+  spare2 := '00000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+   typeOfOffendingIE := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+    lengthIndicator2 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+     instanceOfOffendingIE := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+        spare3 := omit</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) Cause tr_GTP2C_Cause(template (present) OCT1 cause) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        elementIdentifier := '02'O,</span><br><span style="color: hsl(120, 100%, 40%);">+   lengthIndicator := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ instance := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+        spare := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+     causeValue := cause,</span><br><span style="color: hsl(120, 100%, 40%);">+  cS := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+      bCE := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+     pCE := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+     spare2 := '00000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+   typeOfOffendingIE := *,</span><br><span style="color: hsl(120, 100%, 40%);">+       lengthIndicator2 := *,</span><br><span style="color: hsl(120, 100%, 40%);">+        instanceOfOffendingIE := *,</span><br><span style="color: hsl(120, 100%, 40%);">+   spare3 := *</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%);">+/* 8.5 */</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) AccessPointName ts_GTP2C_APN(template (value) octetstring apn) := {</span><br><span style="color: hsl(120, 100%, 40%);">+     elementIdentifier := '48'O,</span><br><span style="color: hsl(120, 100%, 40%);">+   lengthIndicator := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+       instance := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+  spare := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+     aPN_Value := apn</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) AccessPointName tr_GTP2C_APN(template (present) octetstring apn) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ elementIdentifier := '48'O,</span><br><span style="color: hsl(120, 100%, 40%);">+   lengthIndicator := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ instance := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+        spare := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+     aPN_Value := apn</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%);">+/* 8.14 */</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PDN_AddressAllocation</span><br><span style="color: hsl(120, 100%, 40%);">+ts_GTP2C_PdnAddrAlloc(template (value) BIT3 pdn_type,</span><br><span style="color: hsl(120, 100%, 40%);">+                    template (value) PDN_Address_and_Prefix addr_pfx) := {</span><br><span style="color: hsl(120, 100%, 40%);">+  elementIdentifier := '4F'O,</span><br><span style="color: hsl(120, 100%, 40%);">+   lengthIndicator := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+       instance := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+  spare := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+     pDN_Type := pdn_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare2 := '00000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+   pDN_Address_and_Prefix := addr_pfx</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) PDN_AddressAllocation</span><br><span style="color: hsl(120, 100%, 40%);">+tr_GTP2C_PdnAddrAlloc(template (present) BIT3 pdn_type,</span><br><span style="color: hsl(120, 100%, 40%);">+                    template (present) PDN_Address_and_Prefix addr_pfx) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        elementIdentifier := '4F'O,</span><br><span style="color: hsl(120, 100%, 40%);">+   lengthIndicator := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ instance := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+        spare := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+     pDN_Type := pdn_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare2 := '00000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+   pDN_Address_and_Prefix := addr_pfx</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PDN_AddressAllocation</span><br><span style="color: hsl(120, 100%, 40%);">+ts_GTP2C_PdnAddrAlloc_v4(template (value) OCT4 addr) :=</span><br><span style="color: hsl(120, 100%, 40%);">+        ts_GTP2C_PdnAddrAlloc('001'B, {iPv4_Address:=addr});</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) PDN_AddressAllocation</span><br><span style="color: hsl(120, 100%, 40%);">+tr_GTP2C_PdnAddrAlloc_v4(template (present) OCT4 addr) :=</span><br><span style="color: hsl(120, 100%, 40%);">+     ts_GTP2C_PdnAddrAlloc('001'B, {iPv4_Address:=addr});</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* 8.17 */</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) RAT_Type ts_GTP2C_RatType(template (value) integer rat) := {</span><br><span style="color: hsl(120, 100%, 40%);">+     elementIdentifier := '53'O,</span><br><span style="color: hsl(120, 100%, 40%);">+   lengthIndicator := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+       instance := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+  spare := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+     rAT_TypeValue := rat,</span><br><span style="color: hsl(120, 100%, 40%);">+ additionalOctets := omit</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) RAT_Type tr_GTP2C_RatType(template (present) integer rat) := {</span><br><span style="color: hsl(120, 100%, 40%);">+        elementIdentifier := '53'O,</span><br><span style="color: hsl(120, 100%, 40%);">+   lengthIndicator := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ instance := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+        spare := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+     rAT_TypeValue := rat,</span><br><span style="color: hsl(120, 100%, 40%);">+ additionalOctets := *</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%);">+/* 8.22 */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_bit4oct(template (omit) octetstring os) return BIT1</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   if (istemplatekind(os, "omit")) {</span><br><span style="color: hsl(120, 100%, 40%);">+           return '0'B;</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              return '1'B;</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) FullyQualifiedTEID</span><br><span style="color: hsl(120, 100%, 40%);">+ts_GTP2C_FTEID(integer if_type, OCT4 teid, template (omit) OCT4 v4_addr := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+           template (omit) OCT16 v6_addr := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+   elementIdentifier := '57'O,</span><br><span style="color: hsl(120, 100%, 40%);">+   lengthIndicator := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+       instance := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+  spare := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+     interfaceType := if_type,</span><br><span style="color: hsl(120, 100%, 40%);">+     v6_Flag := f_bit4oct(v4_addr),</span><br><span style="color: hsl(120, 100%, 40%);">+        v4_Flag := f_bit4oct(v6_addr),</span><br><span style="color: hsl(120, 100%, 40%);">+        tEID_GRE_Key := teid,</span><br><span style="color: hsl(120, 100%, 40%);">+ iPv4_Address := v4_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+      iPv6_Address := v6_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+      additionalOctets := omit</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+template (present) FullyQualifiedTEID</span><br><span style="color: hsl(120, 100%, 40%);">+tr_GTP2C_FTEID(template (present) integer if_type, template (present) OCT4 teid,</span><br><span style="color: hsl(120, 100%, 40%);">+          template OCT4 v4_addr := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                template OCT16 v6_addr := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+  elementIdentifier := '57'O,</span><br><span style="color: hsl(120, 100%, 40%);">+   lengthIndicator := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ instance := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+        spare := '0000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+     interfaceType := if_type,</span><br><span style="color: hsl(120, 100%, 40%);">+     v6_Flag := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ v4_Flag := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ tEID_GRE_Key := teid,</span><br><span style="color: hsl(120, 100%, 40%);">+ iPv4_Address := v4_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+      iPv6_Address := v6_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+      additionalOctets := 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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PDU_GTPCv2 ts_PDU_GTP2C(template (omit) OCT4 teid, template (value) OCT3 seq,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      template (value) OCT1 msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       template (value) GTPCv2_PDUs pdus,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    template (omit) PDU_GTPCv2 piggyback := omit) := {</span><br><span style="color: hsl(120, 100%, 40%);">+   spare := '000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+      t_Bit := fs_GTP2C_t_bit(teid),</span><br><span style="color: hsl(120, 100%, 40%);">+        p_Bit := fs_GTP2C_p_bit(piggyback),</span><br><span style="color: hsl(120, 100%, 40%);">+   version := '010'B,</span><br><span style="color: hsl(120, 100%, 40%);">+    messageType := msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+      lengthf := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+       tEID := teid,</span><br><span style="color: hsl(120, 100%, 40%);">+ sequenceNumber := seq,</span><br><span style="color: hsl(120, 100%, 40%);">+        spare3 := '00'O,</span><br><span style="color: hsl(120, 100%, 40%);">+      gtpcv2_pdu := pdus,</span><br><span style="color: hsl(120, 100%, 40%);">+   piggybackPDU_GTPCv2 := piggyback</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 (present) PDU_GTPCv2</span><br><span style="color: hsl(120, 100%, 40%);">+tr_GTP2C_CreateSessionReq(template (present) hexstring imsi) := tr_PDU_GTP2C('00000000'O, {</span><br><span style="color: hsl(120, 100%, 40%);">+   createSessionRequest := {</span><br><span style="color: hsl(120, 100%, 40%);">+             iMSI := tr_GTP2C_Imsi(imsi),</span><br><span style="color: hsl(120, 100%, 40%);">+          mSISDN := *,</span><br><span style="color: hsl(120, 100%, 40%);">+          mEI := *,</span><br><span style="color: hsl(120, 100%, 40%);">+             userLocationInfo := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                servingNetwork := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+          rAT_Type := tr_GTP2C_RatType(6),</span><br><span style="color: hsl(120, 100%, 40%);">+              indication := *,</span><br><span style="color: hsl(120, 100%, 40%);">+              fullyQualifiedTEID := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+              accessPointName := tr_GTP2C_APN('012a'O), // '*'</span><br><span style="color: hsl(120, 100%, 40%);">+              selectionMode := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+           pDN_Type := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                pDN_AddressAllocation := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+           maxAPN_Restriction := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+              ambr := *,</span><br><span style="color: hsl(120, 100%, 40%);">+            linkedEPS_Bearer_ID := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+          trustedWLANModeIndication := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+            protocolConfigOptions := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                bearerContextGrouped := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+            traceInformation := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                recovery := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+             csid := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+         uE_TimeZone := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+             user_CSG_Information := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+         chargingCharacteristics := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+         lDN := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+          signallingPriorityIndication := *,</span><br><span style="color: hsl(120, 100%, 40%);">+            iP_Addr := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+              portNumber := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+           aPCO := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+         trustedWLANAccessNetworkIdentifier := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+           cNOperatorSelectionEntity := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+            presenceReportingAreaInformation := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+             overloadControlInformationGrouped := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+            originationTimeStamp := *,</span><br><span style="color: hsl(120, 100%, 40%);">+            maximumWaitTime := *,</span><br><span style="color: hsl(120, 100%, 40%);">+         wLANLocationTimestamp := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                nBIFOMContainer := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+              remoteUEContextGrouped := *,</span><br><span style="color: hsl(120, 100%, 40%);">+          nodeIdentifier := *,</span><br><span style="color: hsl(120, 100%, 40%);">+          extendedProtocolConfigOptions := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                servingPLMNRateControl := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+               counter := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+              privateExtension := 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 (value) PDU_GTPCv2</span><br><span style="color: hsl(120, 100%, 40%);">+ts_GTP2C_CreateSessionResp(template (value) FullyQualifiedTEID_List fteids,</span><br><span style="color: hsl(120, 100%, 40%);">+                         template (value) PDN_AddressAllocation addr) :=</span><br><span style="color: hsl(120, 100%, 40%);">+ts_PDU_GTP2C('00000000'O, '000000'O, '20'O, {</span><br><span style="color: hsl(120, 100%, 40%);">+     createSessionResponse := {</span><br><span style="color: hsl(120, 100%, 40%);">+            cause := ts_GTP2C_Cause(int2oct(16, 1), '0'B),</span><br><span style="color: hsl(120, 100%, 40%);">+                changeReportingAction := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                cSG_InformationReportingAction := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+               heNBInformationReporting := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+             fullyQualifiedTEID := fteids,</span><br><span style="color: hsl(120, 100%, 40%);">+         pDN_AddressAllocation := addr,</span><br><span style="color: hsl(120, 100%, 40%);">+                aPN_Restriction := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+              ambr := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+         linkedEPS_Bearer_ID := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+          protocolConfigOptions := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                bearerContextGrouped := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+         recovery := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+             chargingGatewayName := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+          chargingGatewayAddress := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+               csid := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+         lDN := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+          pGW_Back_OffTime := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+             aPCO := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+         trustedWLANIPv4Parameters := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+            indicationFlags := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+              presenceReportingAreaAction := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+          loadControlInformationGrouped := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                overloadControlInformationGrouped := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+            nBIFOMContainer := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+              pDNConnectionChargingID := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+              extendedProtocolConfigOptions := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                privateExtension := 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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/mme/gen_links.sh b/mme/gen_links.sh</span><br><span>index 66effb5..5664711 100755</span><br><span>--- a/mme/gen_links.sh</span><br><span>+++ b/mme/gen_links.sh</span><br><span>@@ -35,6 +35,14 @@</span><br><span> FILES="NAS_EPS_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.GTPv2_v13.7.0/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="GTPv2_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.GTP_v13.5.0/src</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="GTPC_EncDec.cc   GTPC_Types.ttcn  GTPU_EncDec.cc   GTPU_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/s1ap</span><br><span> FILES="S1AP_CommonDataTypes.asn S1AP_Constants.asn S1AP_Containers.asn S1AP_IEs.asn S1AP_PDU_Contents.asn</span><br><span> S1AP_PDU_Descriptions.asn "</span><br><span>@@ -46,7 +54,7 @@</span><br><span> FILES+="SGsAP_Templates.ttcn SGsAP_CodecPort.ttcn SGsAP_CodecPort_CtrlFunct.ttcn SGsAP_CodecPort_CtrlFunctDef.cc SGsAP_Emulation.ttcn DNS_Helpers.ttcn "</span><br><span> FILES+="L3_Templates.ttcn "</span><br><span> FILES+="S1AP_CodecPort.ttcn S1AP_CodecPort_CtrlFunctDef.cc S1AP_CodecPort_CtrlFunct.ttcn S1AP_Emulation.ttcn "</span><br><span style="color: hsl(0, 100%, 40%);">-FILES+="NAS_Templates.ttcn "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES+="NAS_Templates.ttcn GTPv2_PrivateExtensions.ttcn GTPv2_Templates.ttcn "</span><br><span> gen_links $DIR $FILES</span><br><span> </span><br><span> ignore_pp_results</span><br><span>diff --git a/mme/regen_makefile.sh b/mme/regen_makefile.sh</span><br><span>index 75fc31d..9fb5f88 100755</span><br><span>--- a/mme/regen_makefile.sh</span><br><span>+++ b/mme/regen_makefile.sh</span><br><span>@@ -1,6 +1,6 @@</span><br><span> #!/bin/sh</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-FILES="*.ttcn *.asn *.c IPL4asp_PT.cc  IPL4asp_discovery.cc  Native_FunctionDefs.cc SGsAP_CodecPort_CtrlFunctDef.cc  S1AP_CodecPort_CtrlFunctDef.cc  TCCConversion.cc  TCCEncoding.cc  TCCInterface.cc  TELNETasp_PT.cc S1AP_EncDec.cc LTE_CryptoFunctionDefs.cc "</span><br><span style="color: hsl(120, 100%, 40%);">+FILES="*.ttcn *.asn *.c IPL4asp_PT.cc  IPL4asp_discovery.cc  Native_FunctionDefs.cc SGsAP_CodecPort_CtrlFunctDef.cc  S1AP_CodecPort_CtrlFunctDef.cc  TCCConversion.cc  TCCEncoding.cc  TCCInterface.cc  TELNETasp_PT.cc S1AP_EncDec.cc LTE_CryptoFunctionDefs.cc GTPU_EncDec.cc GTPC_EncDec.cc "</span><br><span> </span><br><span> export CPPFLAGS_TTCN3=""</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/15204">change 15204</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/+/15204"/><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: I1c1b8409077103dd4e64e467d21d33d8c9c4ac95 </div>
<div style="display:none"> Gerrit-Change-Number: 15204 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-CC: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>