<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>