First code commit
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..3534f2f
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,277 @@
+Eclipse Public License - v 2.0

+

+    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE

+    PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION

+    OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

+

+1. DEFINITIONS

+

+"Contribution" means:

+

+  a) in the case of the initial Contributor, the initial content

+     Distributed under this Agreement, and

+

+  b) in the case of each subsequent Contributor:

+     i) changes to the Program, and

+     ii) additions to the Program;

+  where such changes and/or additions to the Program originate from

+  and are Distributed by that particular Contributor. A Contribution

+  "originates" from a Contributor if it was added to the Program by

+  such Contributor itself or anyone acting on such Contributor's behalf.

+  Contributions do not include changes or additions to the Program that

+  are not Modified Works.

+

+"Contributor" means any person or entity that Distributes the Program.

+

+"Licensed Patents" mean patent claims licensable by a Contributor which

+are necessarily infringed by the use or sale of its Contribution alone

+or when combined with the Program.

+

+"Program" means the Contributions Distributed in accordance with this

+Agreement.

+

+"Recipient" means anyone who receives the Program under this Agreement

+or any Secondary License (as applicable), including Contributors.

+

+"Derivative Works" shall mean any work, whether in Source Code or other

+form, that is based on (or derived from) the Program and for which the

+editorial revisions, annotations, elaborations, or other modifications

+represent, as a whole, an original work of authorship.

+

+"Modified Works" shall mean any work in Source Code or other form that

+results from an addition to, deletion from, or modification of the

+contents of the Program, including, for purposes of clarity any new file

+in Source Code form that contains any contents of the Program. Modified

+Works shall not include works that contain only declarations,

+interfaces, types, classes, structures, or files of the Program solely

+in each case in order to link to, bind by name, or subclass the Program

+or Modified Works thereof.

+

+"Distribute" means the acts of a) distributing or b) making available

+in any manner that enables the transfer of a copy.

+

+"Source Code" means the form of a Program preferred for making

+modifications, including but not limited to software source code,

+documentation source, and configuration files.

+

+"Secondary License" means either the GNU General Public License,

+Version 2.0, or any later versions of that license, including any

+exceptions or additional permissions as identified by the initial

+Contributor.

+

+2. GRANT OF RIGHTS

+

+  a) Subject to the terms of this Agreement, each Contributor hereby

+  grants Recipient a non-exclusive, worldwide, royalty-free copyright

+  license to reproduce, prepare Derivative Works of, publicly display,

+  publicly perform, Distribute and sublicense the Contribution of such

+  Contributor, if any, and such Derivative Works.

+

+  b) Subject to the terms of this Agreement, each Contributor hereby

+  grants Recipient a non-exclusive, worldwide, royalty-free patent

+  license under Licensed Patents to make, use, sell, offer to sell,

+  import and otherwise transfer the Contribution of such Contributor,

+  if any, in Source Code or other form. This patent license shall

+  apply to the combination of the Contribution and the Program if, at

+  the time the Contribution is added by the Contributor, such addition

+  of the Contribution causes such combination to be covered by the

+  Licensed Patents. The patent license shall not apply to any other

+  combinations which include the Contribution. No hardware per se is

+  licensed hereunder.

+

+  c) Recipient understands that although each Contributor grants the

+  licenses to its Contributions set forth herein, no assurances are

+  provided by any Contributor that the Program does not infringe the

+  patent or other intellectual property rights of any other entity.

+  Each Contributor disclaims any liability to Recipient for claims

+  brought by any other entity based on infringement of intellectual

+  property rights or otherwise. As a condition to exercising the

+  rights and licenses granted hereunder, each Recipient hereby

+  assumes sole responsibility to secure any other intellectual

+  property rights needed, if any. For example, if a third party

+  patent license is required to allow Recipient to Distribute the

+  Program, it is Recipient's responsibility to acquire that license

+  before distributing the Program.

+

+  d) Each Contributor represents that to its knowledge it has

+  sufficient copyright rights in its Contribution, if any, to grant

+  the copyright license set forth in this Agreement.

+

+  e) Notwithstanding the terms of any Secondary License, no

+  Contributor makes additional grants to any Recipient (other than

+  those set forth in this Agreement) as a result of such Recipient's

+  receipt of the Program under the terms of a Secondary License

+  (if permitted under the terms of Section 3).

+

+3. REQUIREMENTS

+

+3.1 If a Contributor Distributes the Program in any form, then:

+

+  a) the Program must also be made available as Source Code, in

+  accordance with section 3.2, and the Contributor must accompany

+  the Program with a statement that the Source Code for the Program

+  is available under this Agreement, and informs Recipients how to

+  obtain it in a reasonable manner on or through a medium customarily

+  used for software exchange; and

+

+  b) the Contributor may Distribute the Program under a license

+  different than this Agreement, provided that such license:

+     i) effectively disclaims on behalf of all other Contributors all

+     warranties and conditions, express and implied, including

+     warranties or conditions of title and non-infringement, and

+     implied warranties or conditions of merchantability and fitness

+     for a particular purpose;

+

+     ii) effectively excludes on behalf of all other Contributors all

+     liability for damages, including direct, indirect, special,

+     incidental and consequential damages, such as lost profits;

+

+     iii) does not attempt to limit or alter the recipients' rights

+     in the Source Code under section 3.2; and

+

+     iv) requires any subsequent distribution of the Program by any

+     party to be under a license that satisfies the requirements

+     of this section 3.

+

+3.2 When the Program is Distributed as Source Code:

+

+  a) it must be made available under this Agreement, or if the

+  Program (i) is combined with other material in a separate file or

+  files made available under a Secondary License, and (ii) the initial

+  Contributor attached to the Source Code the notice described in

+  Exhibit A of this Agreement, then the Program may be made available

+  under the terms of such Secondary Licenses, and

+

+  b) a copy of this Agreement must be included with each copy of

+  the Program.

+

+3.3 Contributors may not remove or alter any copyright, patent,

+trademark, attribution notices, disclaimers of warranty, or limitations

+of liability ("notices") contained within the Program from any copy of

+the Program which they Distribute, provided that Contributors may add

+their own appropriate notices.

+

+4. COMMERCIAL DISTRIBUTION

+

+Commercial distributors of software may accept certain responsibilities

+with respect to end users, business partners and the like. While this

+license is intended to facilitate the commercial use of the Program,

+the Contributor who includes the Program in a commercial product

+offering should do so in a manner which does not create potential

+liability for other Contributors. Therefore, if a Contributor includes

+the Program in a commercial product offering, such Contributor

+("Commercial Contributor") hereby agrees to defend and indemnify every

+other Contributor ("Indemnified Contributor") against any losses,

+damages and costs (collectively "Losses") arising from claims, lawsuits

+and other legal actions brought by a third party against the Indemnified

+Contributor to the extent caused by the acts or omissions of such

+Commercial Contributor in connection with its distribution of the Program

+in a commercial product offering. The obligations in this section do not

+apply to any claims or Losses relating to any actual or alleged

+intellectual property infringement. In order to qualify, an Indemnified

+Contributor must: a) promptly notify the Commercial Contributor in

+writing of such claim, and b) allow the Commercial Contributor to control,

+and cooperate with the Commercial Contributor in, the defense and any

+related settlement negotiations. The Indemnified Contributor may

+participate in any such claim at its own expense.

+

+For example, a Contributor might include the Program in a commercial

+product offering, Product X. That Contributor is then a Commercial

+Contributor. If that Commercial Contributor then makes performance

+claims, or offers warranties related to Product X, those performance

+claims and warranties are such Commercial Contributor's responsibility

+alone. Under this section, the Commercial Contributor would have to

+defend claims against the other Contributors related to those performance

+claims and warranties, and if a court requires any other Contributor to

+pay any damages as a result, the Commercial Contributor must pay

+those damages.

+

+5. NO WARRANTY

+

+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT

+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"

+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR

+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF

+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR

+PURPOSE. Each Recipient is solely responsible for determining the

+appropriateness of using and distributing the Program and assumes all

+risks associated with its exercise of rights under this Agreement,

+including but not limited to the risks and costs of program errors,

+compliance with applicable laws, damage to or loss of data, programs

+or equipment, and unavailability or interruption of operations.

+

+6. DISCLAIMER OF LIABILITY

+

+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT

+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS

+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,

+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST

+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN

+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)

+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE

+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE

+POSSIBILITY OF SUCH DAMAGES.

+

+7. GENERAL

+

+If any provision of this Agreement is invalid or unenforceable under

+applicable law, it shall not affect the validity or enforceability of

+the remainder of the terms of this Agreement, and without further

+action by the parties hereto, such provision shall be reformed to the

+minimum extent necessary to make such provision valid and enforceable.

+

+If Recipient institutes patent litigation against any entity

+(including a cross-claim or counterclaim in a lawsuit) alleging that the

+Program itself (excluding combinations of the Program with other software

+or hardware) infringes such Recipient's patent(s), then such Recipient's

+rights granted under Section 2(b) shall terminate as of the date such

+litigation is filed.

+

+All Recipient's rights under this Agreement shall terminate if it

+fails to comply with any of the material terms or conditions of this

+Agreement and does not cure such failure in a reasonable period of

+time after becoming aware of such noncompliance. If all Recipient's

+rights under this Agreement terminate, Recipient agrees to cease use

+and distribution of the Program as soon as reasonably practicable.

+However, Recipient's obligations under this Agreement and any licenses

+granted by Recipient relating to the Program shall continue and survive.

+

+Everyone is permitted to copy and distribute copies of this Agreement,

+but in order to avoid inconsistency the Agreement is copyrighted and

+may only be modified in the following manner. The Agreement Steward

+reserves the right to publish new versions (including revisions) of

+this Agreement from time to time. No one other than the Agreement

+Steward has the right to modify this Agreement. The Eclipse Foundation

+is the initial Agreement Steward. The Eclipse Foundation may assign the

+responsibility to serve as the Agreement Steward to a suitable separate

+entity. Each new version of the Agreement will be given a distinguishing

+version number. The Program (including Contributions) may always be

+Distributed subject to the version of the Agreement under which it was

+received. In addition, after a new version of the Agreement is published,

+Contributor may elect to Distribute the Program (including its

+Contributions) under the new version.

+

+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient

+receives no rights or licenses to the intellectual property of any

+Contributor under this Agreement, whether expressly, by implication,

+estoppel or otherwise. All rights in the Program not expressly granted

+under this Agreement are reserved. Nothing in this Agreement is intended

+to be enforceable by any entity that is not a Contributor or Recipient.

+No third-party beneficiary rights are created under this Agreement.

+

+Exhibit A - Form of Secondary Licenses Notice

+

+"This Source Code may also be made available under the following 

+Secondary Licenses when the conditions for such availability set forth 

+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),

+version(s), and exceptions or additional permissions here}."

+

+  Simply including a copy of this Agreement, including this Exhibit A

+  is not sufficient to license the Source Code under Secondary Licenses.

+

+  If it is not possible or desirable to put the notice in a particular

+  file, then You may include the notice in a location (such as a LICENSE

+  file in a relevant directory) where a recipient would be likely to

+  look for such a notice.

+

+  You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/PFCP_v15.1.0_CNL113875.tpd b/PFCP_v15.1.0_CNL113875.tpd
new file mode 100644
index 0000000..0c281d3
--- /dev/null
+++ b/PFCP_v15.1.0_CNL113875.tpd
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>PFCP_v15.1.0_CNL113875</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/>
+  </ReferencedProjects>
+  <Files>
+    <FileResource projectRelativePath="PFCP_Types.ttcn" relativeURI="src/PFCP_Types.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/PFCP_v15.1.0_CNL113875</targetExecutable>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
diff --git a/doc/PFCP_v15.1.0_CNL113875_1551.doc b/doc/PFCP_v15.1.0_CNL113875_1551.doc
new file mode 100644
index 0000000..d5f05b1
--- /dev/null
+++ b/doc/PFCP_v15.1.0_CNL113875_1551.doc
Binary files differ
diff --git a/doc/PFCP_v15.1.0_CNL113875_PRI.doc b/doc/PFCP_v15.1.0_CNL113875_PRI.doc
new file mode 100644
index 0000000..a49ac68
--- /dev/null
+++ b/doc/PFCP_v15.1.0_CNL113875_PRI.doc
Binary files differ
diff --git a/src/PFCP_Types.ttcn b/src/PFCP_Types.ttcn
new file mode 100644
index 0000000..9d04290
--- /dev/null
+++ b/src/PFCP_Types.ttcn
@@ -0,0 +1,2294 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v2.0
+// which accompanies this distribution, and is available at
+// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:               PFCP_Types.ttcn
+//  Description:        PFCP protocol module
+//  Rev:                <RnXnn>
+//  Prodnr:             CNL 113 875
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 29.244 v15.1.0
+//
+
+module PFCP_Types{
+
+import from General_Types all;
+
+external function enc_PDU_PFCP(in PDU_PFCP pdu) return octetstring
+with { extension "prototype(convert)" extension "encode(RAW)" }
+
+external function dec_PDU_PFCP(in octetstring stream) return PDU_PFCP
+with { extension "prototype(convert)" extension "decode(RAW)" }
+
+external function enc_PDU_PFCP_fast(in PDU_PFCP pdu, out octetstring stream)
+with { extension "prototype(fast) encode(RAW)" }
+
+external function dec_PDU_PFCP_backtrack(in octetstring stream, out PDU_PFCP pdu) return integer
+with { extension "prototype(backtrack) decode(RAW)" }
+
+
+// Information Elements
+
+// 8.2.1	Cause
+type record Cause {
+  LIN2_BO_LAST      elementIdentifier(19),
+  LIN2_BO_LAST      lengthIndicator,
+  OCT1              causeValue
+} with {
+  variant "PRESENCE (elementIdentifier = 19; )"
+  variant (lengthIndicator) "LENGTHTO(causeValue )"
+}
+
+//8.2.2	Source Interface
+type record Source_Interface {
+  LIN2_BO_LAST      elementIdentifier(20),
+  LIN2_BO_LAST      lengthIndicator,
+  INT4b             interfacevalue,
+  BIT4              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 20; )"
+  variant (lengthIndicator) "LENGTHTO(interfacevalue, spare)"
+}
+
+// 8.2.3 F-TEID
+type record F_TEID {
+  LIN2_BO_LAST      elementIdentifier(21),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              v4,
+  BIT1              v6,
+  BIT1              ch,
+  BIT1              chid,
+  BIT4              spare,
+  OCT4              teid optional,
+  OCT4              ipv4_address optional,
+  OCT16             ipv6_address optional,
+  OCT1              choose_id optional
+} with {
+  variant (ipv4_address) "PRESENCE (v4 = '1'B )"
+  variant (ipv6_address) "PRESENCE (v6 = '1'B )"
+  variant (choose_id) "PRESENCE (chid = '1'B )"
+  variant "PRESENCE (elementIdentifier = 21; )"
+  variant (lengthIndicator) "LENGTHTO(v4,v6,ch,chid,spare,teid,ipv4_address,ipv6_address,choose_id)"
+}
+
+// 8.2.4 PDN Instance
+type Network_Instance PDN_Instance 
+type record Network_Instance {
+  LIN2_BO_LAST      elementIdentifier(22),
+  LIN2_BO_LAST      lengthIndicator,
+  octetstring       pdn_instance
+} with {
+  variant "PRESENCE (elementIdentifier = 22; )"
+  variant (lengthIndicator) "LENGTHTO(pdn_instance )"
+}
+
+// 8.2.5 SDF Filter
+type record SDF_Filter {
+  LIN2_BO_LAST      elementIdentifier(23),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              fd,
+  BIT1              ttc,
+  BIT1              spi,
+  BIT1              fl,
+  BIT1              bid,
+  BIT11             spare,
+  LIN2_BO_LAST      lengthFlowDesc optional,
+  octetstring       flow_description optional,
+  OCT2              ToS_Traffic_Class optional,
+  OCT4              security_parameter_index optional,
+  OCT3              flow_label optional,
+  LIN4_BO_LAST      SDF_filter_id optional
+} with {
+  variant "PRESENCE (elementIdentifier = 23; )"
+  variant (lengthFlowDesc) "PRESENCE (fd = '1'B )"
+  variant (flow_description) "PRESENCE (fd = '1'B )"
+  variant (ToS_Traffic_Class) "PRESENCE (ttc = '1'B )"
+  variant (SDF_filter_id) "PRESENCE (bid = '1'B )"
+  variant (security_parameter_index) "PRESENCE (spi = '1'B )"
+  variant (flow_label) "PRESENCE (fl = '1'B )"
+  variant (lengthFlowDesc) "LENGTHTO(flow_description)"
+  variant (lengthIndicator) "LENGTHTO(fd,ttc,spi,fl,bid,spare,lengthFlowDesc,flow_description,ToS_Traffic_Class,security_parameter_index,flow_label, SDF_filter_id)"
+}
+
+type record of SDF_Filter SDF_Filter_list;
+
+// 8.2.6	Application ID
+type record Application_ID {
+  LIN2_BO_LAST      elementIdentifier(24),
+  LIN2_BO_LAST      lengthIndicator,
+  octetstring       application_id
+} with {
+  variant "PRESENCE (elementIdentifier = 24; )"
+  variant (lengthIndicator) "LENGTHTO(application_id )"
+}
+
+// 8.2.7 Gate Status
+type record Gate_Status {
+  LIN2_BO_LAST      elementIdentifier(25),
+  LIN2_BO_LAST      lengthIndicator,
+  INT2b             dl_gate,
+  INT2b             ul_gate,
+  BIT4              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 25; )"
+  variant (lengthIndicator) "LENGTHTO(dl_gate,ul_gate,spare )"
+}
+
+// 8.2.8 MBR
+type record MBR {
+  LIN2_BO_LAST      elementIdentifier(26),
+  LIN2_BO_LAST      lengthIndicator,
+  OCT5              ul_mbr,
+  OCT5              dl_mbr
+} with {
+  variant "PRESENCE (elementIdentifier = 26; )"
+  variant (lengthIndicator) "LENGTHTO(ul_mbr,dl_mbr )"
+}
+
+// 8.2.9 GBR
+type record GBR {
+  LIN2_BO_LAST      elementIdentifier(27),
+  LIN2_BO_LAST      lengthIndicator,
+  OCT5              ul_gbr,
+  OCT5              dl_gbr
+} with {
+  variant "PRESENCE (elementIdentifier = 27; )"
+  variant (lengthIndicator) "LENGTHTO(ul_gbr,dl_gbr )"
+}
+
+
+// 8.2.10	QER Correlation ID
+type record QER_Correlation_ID {
+  LIN2_BO_LAST      elementIdentifier(28),
+  LIN2_BO_LAST      lengthIndicator,
+  octetstring       qer
+} with {
+  variant "PRESENCE (elementIdentifier = 28; )"
+  variant (lengthIndicator) "LENGTHTO(qer )"
+}
+
+// 8.2.11 Precedence
+type record Precedence {
+  LIN2_BO_LAST      elementIdentifier(29),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      precedence_value
+} with {
+  variant "PRESENCE (elementIdentifier = 29; )"
+  variant (lengthIndicator) "LENGTHTO(precedence_value )"
+}
+
+// 8.2.12 DL Transport Level Marking
+type record DL_Transport_Level_Marking {
+  LIN2_BO_LAST      elementIdentifier(30),
+  LIN2_BO_LAST      lengthIndicator,
+  OCT2              ToS_traffic_class
+} with {
+  variant "PRESENCE (elementIdentifier = 30; )"
+  variant (lengthIndicator) "LENGTHTO( ToS_traffic_class)"
+}
+
+// 8.2.13 Volume Threshold
+type record Volume_Threshold {
+  LIN2_BO_LAST      elementIdentifier(31),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              tovol,
+  BIT1              ulvol,
+  BIT1              dlvol,
+  BIT5              spare,
+  LIN8_BO_LAST      total_volume optional,
+  LIN8_BO_LAST      uplink_volume optional,
+  LIN8_BO_LAST      downlink_volume optional
+} with {
+  variant "PRESENCE (elementIdentifier = 31; )"
+  variant (total_volume) "PRESENCE ( tovol= '1'B )"
+  variant (uplink_volume) "PRESENCE ( ulvol= '1'B )"
+  variant (downlink_volume) "PRESENCE ( dlvol= '1'B )"
+  variant (lengthIndicator) "LENGTHTO(tovol,ulvol,dlvol,spare,total_volume,uplink_volume,downlink_volume )"
+}
+
+// 8.2.14 Time Threshold
+type record Time_Threshold {
+  LIN2_BO_LAST      elementIdentifier(32),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      time_threshold
+} with {
+  variant "PRESENCE (elementIdentifier = 32; )"
+  variant (lengthIndicator) "LENGTHTO(time_threshold )"
+}
+
+// 8.2.15 Monitoring Time
+type record Monitoring_Time {
+  LIN2_BO_LAST      elementIdentifier(33),
+  LIN2_BO_LAST      lengthIndicator,
+  OCT4              monitoring_time
+} with {
+  variant "PRESENCE (elementIdentifier = 33; )"
+  variant (lengthIndicator) "LENGTHTO(monitoring_time )"
+}
+
+// 8.2.16 Subsequent Volume Threshold
+type record Subsequent_Volume_Threshold {
+  LIN2_BO_LAST      elementIdentifier(34),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              tovol,
+  BIT1              ulvol,
+  BIT1              dlvol,
+  BIT5              spare,
+  LIN8_BO_LAST      total_volume optional,
+  LIN8_BO_LAST      uplink_volume optional,
+  LIN8_BO_LAST      downlink_volume optional
+} with {
+  variant "PRESENCE (elementIdentifier = 34; )"
+  variant (total_volume) "PRESENCE ( tovol= '1'B )"
+  variant (uplink_volume) "PRESENCE ( ulvol= '1'B )"
+  variant (downlink_volume) "PRESENCE ( dlvol= '1'B )"
+  variant (lengthIndicator) "LENGTHTO(tovol,ulvol,dlvol,spare,total_volume,uplink_volume,downlink_volume )"
+}
+
+// 8.2.17 Subsequent Time Threshold
+type record Subsequent_Time_Threshold {
+  LIN2_BO_LAST      elementIdentifier(35),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      time_threshold
+} with {
+  variant "PRESENCE (elementIdentifier = 35; )"
+  variant (lengthIndicator) "LENGTHTO(time_threshold )"
+}
+
+// 8.2.18 Inactivity Detection Time
+type record Inactivity_Detection_Time {
+  LIN2_BO_LAST      elementIdentifier(36),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      inactivity_detection_time
+} with {
+  variant "PRESENCE (elementIdentifier = 36; )"
+  variant (lengthIndicator) "LENGTHTO(inactivity_detection_time )"
+}
+
+// 8.2.19 Reporting Triggers
+type record Reporting_Triggers {
+  LIN2_BO_LAST      elementIdentifier(37),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              perio,
+  BIT1              volth,
+  BIT1              timth,
+  BIT1              quhti,
+  BIT1              start_,
+  BIT1              stop_,
+  BIT1              droth,
+  BIT1              liusa,
+  BIT1              volqu,
+  BIT1              timqu,
+  BIT1              envcl,
+  BIT5              spare
+
+} with {
+  variant "PRESENCE (elementIdentifier = 37; )"
+  variant (lengthIndicator) "LENGTHTO( perio,volth,timth,quhti,start_,stop_,droth,liusa,volqu,timqu,envcl,spare)"
+}
+
+// 8.2.20 Redirect Information
+type record Redirect_Information {
+  LIN2_BO_LAST      elementIdentifier(38),
+  LIN2_BO_LAST      lengthIndicator,
+  INT4b             redirect_address_type,
+  LIN2_BO_LAST      addresslength,
+  octetstring       redirect_server_address
+} with {
+  variant "PRESENCE (elementIdentifier = 38; )"
+  variant (addresslength) "LENGTHTO(redirect_server_address)"
+  variant (lengthIndicator) "LENGTHTO( redirect_address_type,addresslength,redirect_server_address)"
+}
+
+// 8.2.21 Report Type
+type record Report_Type {
+  LIN2_BO_LAST      elementIdentifier(39),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              dldr,
+  BIT1              usar,
+  BIT1              erir,
+  BIT1              upir,
+  BIT4              spare
+
+} with {
+  variant "PRESENCE (elementIdentifier = 39; )"
+  variant (lengthIndicator) "LENGTHTO( dldr,usar,erir,upir,spare)"
+}
+
+//8.2.22 Offending IE
+type record Offending_IE {
+  LIN2_BO_LAST      elementIdentifier(40),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN2_BO_LAST      offendingIE
+} with {
+  variant "PRESENCE (elementIdentifier = 40; )"
+  variant (lengthIndicator) "LENGTHTO( offendingIE)"
+}
+
+// 8.2.23 Forwarding Policy
+type record Forwarding_Policy {
+  LIN2_BO_LAST      elementIdentifier(41),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN1              policyIdlength,
+  octetstring       forwarding_policy_id length(0..255)
+} with {
+  variant "PRESENCE (elementIdentifier = 41; )"
+  variant (policyIdlength) "LENGTHTO( forwarding_policy_id)"
+  variant (lengthIndicator) "LENGTHTO( policyIdlength,forwarding_policy_id)"
+}
+
+// 8.2.24 Destination Interface
+type record Destination_Interface {
+  LIN2_BO_LAST      elementIdentifier(42),
+  LIN2_BO_LAST      lengthIndicator,
+  INT4b             interface_value,
+  BIT4              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 42; )"
+  variant (lengthIndicator) "LENGTHTO(interface_value,spare )"
+}
+
+// 8.2.25 UP Function Features
+type record UP_Function_Features {
+  LIN2_BO_LAST      elementIdentifier(43),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT8              oct5,
+  BIT8              oct6
+} with {
+  variant "PRESENCE (elementIdentifier = 43; )"
+  variant (lengthIndicator) "LENGTHTO(oct5,oct6 )"
+}
+
+// 8.2.26 Apply Action
+type record Apply_Action {
+  LIN2_BO_LAST      elementIdentifier(44),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              drop,
+  BIT1              forw,
+  BIT1              buff,
+  BIT1              nocp,
+  BIT1              dupl,
+  BIT3              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 44; )"
+  variant (lengthIndicator) "LENGTHTO(drop,forw,buff,nocp,dupl,spare)"
+}
+
+// 8.2.27 Downlink Data Service
+type record Downlink_Data_Service_Information {
+  LIN2_BO_LAST      elementIdentifier(45),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              ppi,
+  BIT7              spare,
+  BIT6              ppi_value optional,
+  BIT2              spare2 optional
+} with {
+  variant "PRESENCE (elementIdentifier = 45; )"
+  variant (ppi_value) "PRESENCE(ppi = '1'B)"
+  variant (spare) "PRESENCE(ppi = '1'B)"
+  variant (lengthIndicator) "LENGTHTO(ppi,spare,ppi_value,spare2)"
+}
+
+// 8.2.28 Downlink Data Notification Delay
+type record Downlink_Data_Notification_Delay {
+  LIN2_BO_LAST      elementIdentifier(46),
+  LIN2_BO_LAST      lengthIndicator,
+  INT1              delay_value
+} with {
+  variant "PRESENCE (elementIdentifier = 46; )"
+  variant (lengthIndicator) "LENGTHTO(delay_value)"
+}
+
+// 8.2.29 DL Buffering Duration
+type record DL_Buffering_Duration {
+  LIN2_BO_LAST      elementIdentifier(47),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT5              timer_value,
+  BIT3              timer_unit
+} with {
+  variant "PRESENCE (elementIdentifier = 47; )"
+  variant (lengthIndicator) "LENGTHTO(timer_value,timer_unit)"
+}
+
+// 8.2.30 DL Buffering Suggested Packet Count
+type record DL_Buffering_Suggested_Packet_Count {
+  LIN2_BO_LAST      elementIdentifier(48),
+  LIN2_BO_LAST      lengthIndicator,
+  octetstring       packet_count_value
+} with {
+  variant "PRESENCE (elementIdentifier = 48; )"
+  variant (lengthIndicator) "LENGTHTO(packet_count_value)"
+}
+
+// 8.2.31 PFCPSMReq-Flags
+type record PFCPSMReq_Flags {
+  LIN2_BO_LAST      elementIdentifier(49),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              drobu,
+  BIT1              sndem,
+  BIT1              qaurr,
+  BIT5              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 49; )"
+  variant (lengthIndicator) "LENGTHTO(drobu,sndem,qaurr,spare)"
+}
+
+// 8.2.32 PFCPSMRsp-Flags
+type record PFCPSMRsp_Flags {
+  LIN2_BO_LAST      elementIdentifier(50),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              drobu,
+  BIT7              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 50; )"
+  variant (lengthIndicator) "LENGTHTO(drobu,spare)"
+}
+
+// 8.2.33 Sequence Number
+type record Sequence_Number {
+  LIN2_BO_LAST      elementIdentifier(52),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      sequence_number
+} with {
+  variant "PRESENCE (elementIdentifier = 52; )"
+  variant (lengthIndicator) "LENGTHTO(sequence_number)"
+}
+
+// 8.2.34 Metric
+type record Metric {
+  LIN2_BO_LAST      elementIdentifier(53),
+  LIN2_BO_LAST      lengthIndicator,
+  OCT1              metric
+} with {
+  variant "PRESENCE (elementIdentifier = 53; )"
+  variant (lengthIndicator) "LENGTHTO(metric)"
+}
+
+// 8.2.35 Timer
+type record Timer_IE {
+  LIN2_BO_LAST      elementIdentifier(55),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT5              timer_value,
+  BIT3              timer_unit
+} with {
+  variant "PRESENCE (elementIdentifier = 55; )"
+  variant (lengthIndicator) "LENGTHTO(timer_value,timer_unit)"
+}
+
+// 8.2.36 PDR ID
+type record PDR_ID {
+  LIN2_BO_LAST      elementIdentifier(56),
+  LIN2_BO_LAST      lengthIndicator,
+  OCT2              rule_id
+} with {
+  variant "PRESENCE (elementIdentifier = 56; )"
+  variant (lengthIndicator) "LENGTHTO(rule_id)"
+}
+
+// 8.2.37 F-SEID
+type record F_SEID {
+  LIN2_BO_LAST      elementIdentifier(57),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              v6,
+  BIT1              v4,
+  BIT6              spare,
+  OCT8              seid,
+  OCT4              ipv4_address optional,
+  OCT16             ipv6_address optional
+} with {
+  variant (ipv4_address) "PRESENCE (v4 = '1'B )"
+  variant (ipv6_address) "PRESENCE (v6 = '1'B )"
+  variant "PRESENCE (elementIdentifier = 57; )"
+  variant (lengthIndicator) "LENGTHTO(v4,v6,spare,seid,ipv4_address,ipv6_address)"
+}
+
+// 8.2.38 Node ID
+type record Node_ID {
+  LIN2_BO_LAST      elementIdentifier(60),
+  LIN2_BO_LAST      lengthIndicator,
+  INT4b             node_id_type,
+  BIT4              spare,
+  octetstring       node_id_value
+} with {
+  variant "PRESENCE (elementIdentifier = 60; )"
+  variant (lengthIndicator) "LENGTHTO(node_id_type,spare,node_id_value)"
+}
+
+// 8.2.39 PFD Contents
+type record PFD_Contents {
+  LIN2_BO_LAST      elementIdentifier(61),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              fd,
+  BIT1              url_flag,
+  BIT1              dn,
+  BIT1              cp,
+  BIT12             spare,
+  LIN2_BO_LAST      lengthFlowDesc optional,
+  octetstring       flow_description optional,
+  LIN2_BO_LAST      lengthurl optional,
+  octetstring       url optional,
+  LIN2_BO_LAST      lengthdomain_name optional,
+  octetstring       domain_name optional,
+  LIN2_BO_LAST      lengthcustom_pfd optional,
+  octetstring       custom_pfd optional
+} with {
+  variant "PRESENCE (elementIdentifier = 61; )"
+
+  variant (lengthFlowDesc) "PRESENCE (fd = '1'B )"
+  variant (flow_description) "PRESENCE (fd = '1'B )"
+  variant (lengthFlowDesc) "LENGTHTO(flow_description)"
+
+  variant (lengthurl) "PRESENCE (url_flag = '1'B )"
+  variant (url) "PRESENCE (url_flag = '1'B )"
+  variant (lengthurl) "LENGTHTO(url)"
+
+  variant (lengthdomain_name) "PRESENCE (dn = '1'B )"
+  variant (domain_name) "PRESENCE (dn = '1'B )"
+  variant (lengthdomain_name) "LENGTHTO(domain_name)"
+
+  variant (lengthcustom_pfd) "PRESENCE (cp = '1'B )"
+  variant (custom_pfd) "PRESENCE (cp = '1'B )"
+  variant (lengthcustom_pfd) "LENGTHTO(custom_pfd)"
+
+  variant (lengthIndicator) "LENGTHTO(fd,url_flag,dn,cp,spare,lengthFlowDesc,flow_description,lengthurl,url,lengthdomain_name,domain_name,lengthcustom_pfd,custom_pfd )"
+}
+
+// 8.2.40  Measurement Method
+type record Measurement_Method {
+  LIN2_BO_LAST      elementIdentifier(62),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              durat,
+  BIT1              volum,
+  BIT1              event,
+  BIT5              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 62; )"
+  variant (lengthIndicator) "LENGTHTO(durat,volum,event,spare)"
+}
+
+// 8.2.41 Usage Report Trigger
+type record Usage_Report_Trigger {
+  LIN2_BO_LAST      elementIdentifier(63),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              perio,
+  BIT1              volth,
+  BIT1              timth,
+  BIT1              quhti,
+  BIT1              start_,
+  BIT1              stop_,
+  BIT1              droth,
+  BIT1              immer,
+  BIT1              volqu,
+  BIT1              timqu,
+  BIT1              liusa,
+  BIT1              termr,
+  BIT1              monit,
+  BIT1              envcl,
+  BIT2              spare
+
+} with {
+  variant "PRESENCE (elementIdentifier = 63; )"
+  variant (lengthIndicator) "LENGTHTO( perio,volth,timth,quhti,start_,stop_,droth,immer,volqu,timqu,liusa,termr,monit,envcl,spare)"
+}
+
+
+// 8.2.42 Measurement Period
+type record Measurement_Period {
+  LIN2_BO_LAST      elementIdentifier(64),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      period
+} with {
+  variant "PRESENCE (elementIdentifier = 64; )"
+  variant (lengthIndicator) "LENGTHTO(period)"
+}
+
+// 8.2.43 Fully qualified PDN Connection Set Identifier (FQ-CSID)
+type record FQ_CSID {
+  LIN2_BO_LAST      elementIdentifier(65),
+  LIN2_BO_LAST      lengthIndicator,
+  INT4b             num_of_CSIDs,
+  INT4b             node_id_type,
+  union {
+    OCT4         ipv4,
+    OCT16        ipv6,
+    OCT4         addr
+  } node_address,
+  record of OCT2 pdn_id_list
+} with {
+  variant "PRESENCE (elementIdentifier = 65; )"
+  variant (node_address) "CROSSTAG(ipv4,node_id_type=0; ipv6,node_id_type=1;addr,node_id_type=2; )"
+  variant (num_of_CSIDs) "LENGTHTO(pdn_id_list),UNIT(elements)"
+  variant (lengthIndicator) "LENGTHTO(num_of_CSIDs,node_id_type,node_address,pdn_id_list)"
+}
+
+type record of FQ_CSID FQ_CSID_list;
+
+// 8.2.44 Volume Measurement
+type record Volume_Measurement {
+  LIN2_BO_LAST      elementIdentifier(66),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              tovol,
+  BIT1              ulvol,
+  BIT1              dlvol,
+  BIT5              spare,
+  LIN8_BO_LAST      total_volume optional,
+  LIN8_BO_LAST      uplink_volume optional,
+  LIN8_BO_LAST      downlink_volume optional
+} with {
+  variant "PRESENCE (elementIdentifier = 66; )"
+  variant (total_volume) "PRESENCE ( tovol= '1'B )"
+  variant (uplink_volume) "PRESENCE ( ulvol= '1'B )"
+  variant (downlink_volume) "PRESENCE ( dlvol= '1'B )"
+  variant (lengthIndicator) "LENGTHTO(tovol,ulvol,dlvol,spare,total_volume,uplink_volume,downlink_volume )"
+}
+
+// 8.2.45 Duration Measurement
+type record Duration_Measurement {
+  LIN2_BO_LAST      elementIdentifier(67),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      duration
+} with {
+  variant "PRESENCE (elementIdentifier = 67; )"
+  variant (lengthIndicator) "LENGTHTO(duration )"
+}
+
+// 8.2.46 Time of First Packet
+type record Time_of_First_Packet {
+  LIN2_BO_LAST      elementIdentifier(69),
+  LIN2_BO_LAST      lengthIndicator,
+  OCT4              time_of_packet
+} with {
+  variant "PRESENCE (elementIdentifier = 69; )"
+  variant (lengthIndicator) "LENGTHTO(time_of_packet )"
+}
+
+// 8.2.47 Time of Last Packet
+type record Time_of_Last_Packet {
+  LIN2_BO_LAST      elementIdentifier(70),
+  LIN2_BO_LAST      lengthIndicator,
+  OCT4              time_of_packet
+} with {
+  variant "PRESENCE (elementIdentifier = 70; )"
+  variant (lengthIndicator) "LENGTHTO(time_of_packet )"
+}
+
+// 8.2.48 Quota Holding Time
+type record Quota_Holding_Time {
+  LIN2_BO_LAST      elementIdentifier(71),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      time_value
+} with {
+  variant "PRESENCE (elementIdentifier = 71; )"
+  variant (lengthIndicator) "LENGTHTO(time_value )"
+}
+
+// 8.2.49 Dropped DL Traffic Threshold
+type record Dropped_DL_Traffic_Threshold {
+  LIN2_BO_LAST      elementIdentifier(72),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              dlpa,
+  BIT7              spare,
+  LIN8_BO_LAST      packets optional
+} with {
+  variant "PRESENCE (elementIdentifier = 72; )"
+  variant (packets) "PRESENCE (dlpa = '1'B; )"
+  variant (lengthIndicator) "LENGTHTO( dlpa,spare,packets)"
+}
+
+// 8.2.50 Volume Quota
+type record Volume_Quota {
+  LIN2_BO_LAST      elementIdentifier(73),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              tovol,
+  BIT1              ulvol,
+  BIT1              dlvol,
+  BIT5              spare,
+  LIN8_BO_LAST      total_volume optional,
+  LIN8_BO_LAST      uplink_volume optional,
+  LIN8_BO_LAST      downlink_volume optional
+} with {
+  variant "PRESENCE (elementIdentifier = 73; )"
+  variant (total_volume) "PRESENCE ( tovol= '1'B )"
+  variant (uplink_volume) "PRESENCE ( ulvol= '1'B )"
+  variant (downlink_volume) "PRESENCE ( dlvol= '1'B )"
+  variant (lengthIndicator) "LENGTHTO(tovol,ulvol,dlvol,spare,total_volume,uplink_volume,downlink_volume )"
+}
+
+// 8.2.51 Time Quota
+type record Time_Quota {
+  LIN2_BO_LAST      elementIdentifier(74),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      time_value
+} with {
+  variant "PRESENCE (elementIdentifier = 74; )"
+  variant (lengthIndicator) "LENGTHTO(time_value )"
+}
+
+// 8.2.52 Start Time
+type record Start_Time {
+  LIN2_BO_LAST      elementIdentifier(75),
+  LIN2_BO_LAST      lengthIndicator,
+  OCT4              start_time
+} with {
+  variant "PRESENCE (elementIdentifier = 75; )"
+  variant (lengthIndicator) "LENGTHTO(start_time )"
+}
+
+// 8.2.53 End Time
+type record End_Time {
+  LIN2_BO_LAST      elementIdentifier(76),
+  LIN2_BO_LAST      lengthIndicator,
+  OCT4              end_time
+} with {
+  variant "PRESENCE (elementIdentifier = 76; )"
+  variant (lengthIndicator) "LENGTHTO(end_time )"
+}
+
+// 8.2.54 URR ID
+type record URR_ID {
+  LIN2_BO_LAST      elementIdentifier(81),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      id_value
+} with {
+  variant "PRESENCE (elementIdentifier = 81; )"
+  variant (lengthIndicator) "LENGTHTO(id_value )"
+}
+
+type record of URR_ID URR_ID_list;
+
+// 8.2.55 Linked URR ID
+type record Linked_URR_ID {
+  LIN2_BO_LAST      elementIdentifier(82),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      id_value
+} with {
+  variant "PRESENCE (elementIdentifier = 82; )"
+  variant (lengthIndicator) "LENGTHTO(id_value )"
+}
+
+// 8.2.56 Outer Header Creation
+type record Outer_Header_Creation {
+  LIN2_BO_LAST      elementIdentifier(84),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT8              ohc_description_oct5,
+  BIT8              ohc_description_oct6,
+  OCT4              teid optional,
+  OCT4              ipv4 optional,
+  OCT16             ipv6 optional,
+  OCT2              udp_port optional
+} with {
+  variant "PRESENCE (elementIdentifier = 84; )"
+  variant (teid) "PRESENCE({ohc_description_oct5 = '00000001'B, ohc_description_oct5 = '00000010'B, ohc_description_oct5 = '00000011'B})"
+  variant (ipv4) "PRESENCE({ohc_description_oct5 = '00000001'B, ohc_description_oct5 = '00000100'B, ohc_description_oct5 = '00000011'B})"
+  variant (ipv6) "PRESENCE({ohc_description_oct5 = '00000010'B, ohc_description_oct5 = '00001000'B, ohc_description_oct5 = '00000011'B})"
+  variant (lengthIndicator) "LENGTHTO(ohc_description_oct5,ohc_description_oct6,teid,ipv4,ipv6,udp_port )"
+}
+
+// 8.2.57 BAR ID
+type record BAR_ID {
+  LIN2_BO_LAST      elementIdentifier(88),
+  LIN2_BO_LAST      lengthIndicator,
+  OCT1              id_value
+} with {
+  variant "PRESENCE (elementIdentifier = 88; )"
+  variant (lengthIndicator) "LENGTHTO(id_value )"
+}
+
+// 8.2.58 CP Function Features
+type record CP_Function_Features {
+  LIN2_BO_LAST      elementIdentifier(89),
+  LIN2_BO_LAST      lengthIndicator,
+  OCT1              features
+} with {
+  variant "PRESENCE (elementIdentifier = 89; )"
+  variant (lengthIndicator) "LENGTHTO( features)"
+}
+
+// 8.2.59 Usage Information
+type record Usage_Information {
+  LIN2_BO_LAST      elementIdentifier(90),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              bef,
+  BIT1              aft,
+  BIT1              uae,
+  BIT1              ube,
+  BIT4              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 90; )"
+  variant (lengthIndicator) "LENGTHTO(bef,aft,uae,ube,spare)"
+}
+
+// 8.2.60 Application Instance ID
+type record Application_Instance_ID {
+  LIN2_BO_LAST      elementIdentifier(91),
+  LIN2_BO_LAST      lengthIndicator,
+  octetstring       id_value
+} with {
+  variant "PRESENCE (elementIdentifier = 91; )"
+  variant (lengthIndicator) "LENGTHTO(id_value )"
+}
+
+// 8.2.61 Flow Information
+type record Flow_Information {
+  LIN2_BO_LAST      elementIdentifier(92),
+  LIN2_BO_LAST      lengthIndicator,
+  INT3b             flow_direction,
+  BIT5              spare,
+  LIN2_BO_LAST      lengthFlowDesc,
+  octetstring       flow_description
+} with {
+  variant "PRESENCE (elementIdentifier = 92; )"
+  variant (lengthFlowDesc) "LENGTHTO(flow_description)"
+  variant (lengthIndicator) "LENGTHTO(flow_direction,spare,lengthFlowDesc,flow_description )"
+}
+
+// 8.2.62 UE IP Address
+type record UE_IP_Address {
+  LIN2_BO_LAST      elementIdentifier(93),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              v6,
+  BIT1              v4,
+  BIT1              sd,
+  BIT5              spare,
+  OCT4              ipv4_address optional,
+  OCT16             ipv6_address optional
+} with {
+  variant (ipv4_address) "PRESENCE (v4 = '1'B )"
+  variant (ipv6_address) "PRESENCE (v6 = '1'B )"
+  variant "PRESENCE (elementIdentifier = 93; )"
+  variant (lengthIndicator) "LENGTHTO(v4,v6,sd,spare,ipv4_address,ipv6_address)"
+}
+
+// 8.2.63 Packet Rate
+type record Packet_Rate {
+  LIN2_BO_LAST      elementIdentifier(94),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              ulpr,
+  BIT1              dlpr,
+  BIT6              spare,
+  BIT3              uplink_time_unit optional,
+  BIT5              spare2 optional,
+  LIN2_BO_LAST      max_uplink_rate optional,
+  BIT3              downlink_time_unit optional,
+  BIT5              spare3 optional,
+  LIN2_BO_LAST      max_donwlink_rate optional
+} with {
+  variant (uplink_time_unit,spare2,max_uplink_rate) "PRESENCE (ulpr = '1'B )"
+  variant (downlink_time_unit,spare3,max_donwlink_rate) "PRESENCE (dlpr = '1'B )"
+  variant "PRESENCE (elementIdentifier = 94; )"
+  variant (lengthIndicator) "LENGTHTO(ulpr,dlpr,spare,uplink_time_unit,spare2,max_uplink_rate,downlink_time_unit,spare3,max_donwlink_rate)"
+}
+
+// 8.2.64 Outer Header Removal
+type record Outer_Header_Removal {
+  LIN2_BO_LAST      elementIdentifier(95),
+  LIN2_BO_LAST      lengthIndicator,
+  INT1              ohc_description
+} with {
+  variant "PRESENCE (elementIdentifier = 95; )"
+  variant (lengthIndicator) "LENGTHTO(ohc_description )"
+}
+
+// 8.2.65 Recovery Time Stamp
+type record Recovery_Time_Stamp {
+  LIN2_BO_LAST      elementIdentifier(96),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      time_value
+} with {
+  variant "PRESENCE (elementIdentifier = 96; )"
+  variant (lengthIndicator) "LENGTHTO(time_value )"
+}
+
+// 8.2.66 DL Flow Level Marking
+type record DL_Flow_Level_Marking {
+  LIN2_BO_LAST      elementIdentifier(97),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              ttc,
+  BIT1              sci,
+  BIT6              spare,
+  OCT2              tos optional,
+  OCT2              sci_val optional
+} with {
+  variant (tos) "PRESENCE (ttc = '1'B )"
+  variant (sci_val) "PRESENCE (sci = '1'B )"
+  variant "PRESENCE (elementIdentifier = 97; )"
+  variant (lengthIndicator) "LENGTHTO(ttc,sci,spare,tos,sci_val)"
+}
+
+// 8.2.67 Header Enrichment
+type record Header_Enrichment {
+  LIN2_BO_LAST      elementIdentifier(98),
+  LIN2_BO_LAST      lengthIndicator,
+  INT5b             header_type,
+  BIT3              spare,
+  INT1              header_name_length,
+  octetstring       header_name,
+  INT1              header_val_length,
+  octetstring       header_val
+} with {
+  variant "PRESENCE (elementIdentifier = 98; )"
+  variant (header_val_length) "LENGTHTO( header_val)"
+  variant (header_name_length) "LENGTHTO( header_name)"
+  variant (lengthIndicator) "LENGTHTO(header_type,spare,header_name_length,header_name,header_val_length,header_val)"
+}
+
+// 8.2.68 Measurement Information
+type record Measurement_Information {
+  LIN2_BO_LAST      elementIdentifier(100),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              mbqe,
+  BIT1              inam,
+  BIT1              radi,
+  BIT5              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 100; )"
+  variant (lengthIndicator) "LENGTHTO(mbqe,inam,radi,spare)"
+}
+
+// 8.2.69 Node Report Type
+type record Node_Report_Type {
+  LIN2_BO_LAST      elementIdentifier(101),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              upfr,
+  BIT7              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 101; )"
+  variant (lengthIndicator) "LENGTHTO(upfr,spare)"
+}
+
+// 8.2.70 Remote GTP-U Peer
+type record Remote_GTP_U_Peer {
+  LIN2_BO_LAST      elementIdentifier(103),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              v4,
+  BIT1              v6,
+  BIT6              spare,
+  OCT4              ipv4_address optional,
+  OCT16             ipv6_address optional
+} with {
+  variant (ipv4_address) "PRESENCE (v4 = '1'B )"
+  variant (ipv6_address) "PRESENCE (v6 = '1'B )"
+  variant "PRESENCE (elementIdentifier = 103; )"
+  variant (lengthIndicator) "LENGTHTO(v4,v6,spare,ipv4_address,ipv6_address)"
+}
+
+// 8.2.71 UR-SEQN
+type record UR_SEQN {
+  LIN2_BO_LAST      elementIdentifier(104),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      ur_seqn
+} with {
+  variant "PRESENCE (elementIdentifier = 104; )"
+  variant (lengthIndicator) "LENGTHTO( ur_seqn)"
+}
+
+// 8.2.72 Activate Predefined Rules
+type record Activate_Predefined_Rules {
+  LIN2_BO_LAST      elementIdentifier(106),
+  LIN2_BO_LAST      lengthIndicator,
+  octetstring       rule_bame
+} with {
+  variant "PRESENCE (elementIdentifier = 106; )"
+  variant (lengthIndicator) "LENGTHTO( rule_bame)"
+}
+
+// 8.2.73 Deactivate Predefined Rules
+type record Deactivate_Predefined_Rules {
+  LIN2_BO_LAST      elementIdentifier(107),
+  LIN2_BO_LAST      lengthIndicator,
+  octetstring       rule_bame
+} with {
+  variant "PRESENCE (elementIdentifier = 107; )"
+  variant (lengthIndicator) "LENGTHTO( rule_bame)"
+}
+
+// 8.2.74 FAR ID
+type record FAR_ID {
+  LIN2_BO_LAST      elementIdentifier(108),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      id_value
+} with {
+  variant "PRESENCE (elementIdentifier = 108; )"
+  variant (lengthIndicator) "LENGTHTO(id_value )"
+}
+
+// 8.2.75 QER ID
+type record QER_ID {
+  LIN2_BO_LAST      elementIdentifier(109),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      id_value
+} with {
+  variant "PRESENCE (elementIdentifier = 109; )"
+  variant (lengthIndicator) "LENGTHTO(id_value )"
+}
+
+type record of QER_ID QER_ID_list;
+
+// 8.2.76 OCI Flags
+type record OCI_Flags {
+  LIN2_BO_LAST      elementIdentifier(110),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              aoci,
+  BIT7              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 110; )"
+  variant (lengthIndicator) "LENGTHTO(aoci,spare)"
+}
+
+// 8.2.77 PFCP Association Release Request
+type record PFCP_Association_Release_Request_IE {
+  LIN2_BO_LAST      elementIdentifier(111),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              sarr,
+  BIT7              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 111; )"
+  variant (lengthIndicator) "LENGTHTO(sarr,spare)"
+}
+
+// 8.2.78 Graceful Release Period
+type record Graceful_Release_Period {
+  LIN2_BO_LAST      elementIdentifier(112),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT5              timer_value,
+  BIT3              timer_unit
+} with {
+  variant "PRESENCE (elementIdentifier = 112; )"
+  variant (lengthIndicator) "LENGTHTO(timer_value,timer_unit)"
+}
+
+// 8.2.79 PDN Type
+type record PDN_Type {
+  LIN2_BO_LAST      elementIdentifier(113),
+  LIN2_BO_LAST      lengthIndicator,
+  INT3b             pdn_type,
+  BIT5              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 113; )"
+  variant (lengthIndicator) "LENGTHTO(pdn_type,spare)"
+}
+
+// 8.2.80 Failed Rule ID
+type record Failed_Rule_ID {
+  LIN2_BO_LAST      elementIdentifier(114),
+  LIN2_BO_LAST      lengthIndicator,
+  INT5b             rule_id_type,
+  BIT3              spare,
+  octetstring       rule_id_val
+} with {
+  variant "PRESENCE (elementIdentifier = 114; )"
+  variant (lengthIndicator) "LENGTHTO(rule_id_type,spare,rule_id_val)"
+}
+
+// 8.2.81 Time Quota Mechanism
+type record Time_Quota_Mechanism {
+  LIN2_BO_LAST      elementIdentifier(115),
+  LIN2_BO_LAST      lengthIndicator,
+  INT2b             btit,
+  BIT6              spare,
+  LIN4_BO_LAST      base_time_interval
+} with {
+  variant "PRESENCE (elementIdentifier = 115; )"
+  variant (lengthIndicator) "LENGTHTO(btit,spare,base_time_interval)"
+}
+
+// 8.2.82 UP_IP_Resource_Information
+type record UP_IP_Resource_Information {
+  LIN2_BO_LAST      elementIdentifier(116),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              v4,
+  BIT1              v6,
+  INT3b             teidri,
+  BIT1              assoni,
+  BIT2              spare,
+  OCT1              teid_range optional,
+  OCT4              ipv4_address optional,
+  OCT16             ipv6_address optional,
+  octetstring       network_instance optional
+} with {
+  variant (ipv4_address) "PRESENCE(v4 = '1'B)"
+  variant (ipv6_address) "PRESENCE(v6 = '1'B)"
+  variant (network_instance) "PRESENCE(assoni = '1'B)"
+  variant (teid_range) "PRESENCE({teidri=1,teidri=2,teidri=3,teidri=4,teidri=5,teidri=6,teidri=7})"
+  variant "PRESENCE (elementIdentifier = 116; )"
+  variant (lengthIndicator) "LENGTHTO(v4,v6,teidri,assoni,spare,teid_range,ipv4_address,ipv6_address,network_instance)"
+}
+
+type record of UP_IP_Resource_Information UP_IP_Resource_Information_list;
+
+// 8.2.83 UP_Inactivity_Timer
+type record UP_Inactivity_Timer {
+  LIN2_BO_LAST      elementIdentifier(117),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      UP_inactivity_timer
+} with {
+  variant "PRESENCE (elementIdentifier = 117; )"
+  variant (lengthIndicator) "LENGTHTO(UP_inactivity_timer)"
+}
+
+// 8.2.84 Multiplier
+type record Multiplier {
+  LIN2_BO_LAST      elementIdentifier(119),
+  LIN2_BO_LAST      lengthIndicator,
+  integer           value_digits,
+  integer           exponent
+} with {
+  variant "PRESENCE (elementIdentifier = 119; )"
+  variant (value_digits) "FIELDLENGTH(64), BYTEORDER(last)"
+  variant (exponent) "FIELDLENGTH(32), BYTEORDER(last)"
+  variant (lengthIndicator) "LENGTHTO(value_digits,exponent)"
+}
+
+// 8.2.85 Aggregated_URR_ID_IE
+type record Aggregated_URR_ID {
+  LIN2_BO_LAST      elementIdentifier(120),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      id_value
+} with {
+  variant "PRESENCE (elementIdentifier = 120; )"
+  variant (lengthIndicator) "LENGTHTO(id_value)"
+}
+
+// 8.2.86 Subsequent_Volume_Quota
+type record Subsequent_Volume_Quota {
+  LIN2_BO_LAST      elementIdentifier(121),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              tovol,
+  BIT1              ulvol,
+  BIT1              dlvol,
+  BIT5              spare,
+  LIN8_BO_LAST      total_volume optional,
+  LIN8_BO_LAST      uplink_volume optional,
+  LIN8_BO_LAST      downlink_volume optional
+} with {
+  variant "PRESENCE (elementIdentifier = 121; )"
+  variant (total_volume) "PRESENCE ( tovol= '1'B )"
+  variant (uplink_volume) "PRESENCE ( ulvol= '1'B )"
+  variant (downlink_volume) "PRESENCE ( dlvol= '1'B )"
+  variant (lengthIndicator) "LENGTHTO(tovol,ulvol,dlvol,spare,total_volume,uplink_volume,downlink_volume )"
+}
+
+// 8.2.87 Subsequent_Time_Quota
+type record Subsequent_Time_Quota {
+  LIN2_BO_LAST      elementIdentifier(122),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      time_qouta_value
+} with {
+  variant "PRESENCE (elementIdentifier = 122; )"
+  variant (lengthIndicator) "LENGTHTO(time_qouta_value)"
+}
+
+// 8.2.88 RQI
+type record RQI {
+  LIN2_BO_LAST      elementIdentifier(123),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              rqi,
+  BIT7              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 123; )"
+  variant (lengthIndicator) "LENGTHTO(rqi,spare)"
+}
+
+// 8.2.89 QFI
+type record QFI {
+  LIN2_BO_LAST      elementIdentifier(124),
+  LIN2_BO_LAST      lengthIndicator,
+  octetstring       qfi_value
+} with {
+  variant "PRESENCE (elementIdentifier = 124; )"
+  variant (lengthIndicator) "LENGTHTO(qfi_value)"
+}
+
+
+// 8.2.90 Query URR Reference
+type record Query_URR_Reference {
+  LIN2_BO_LAST      elementIdentifier(125),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      query_URR_reference_value
+} with {
+  variant "PRESENCE (elementIdentifier = 125; )"
+  variant (lengthIndicator) "LENGTHTO(query_URR_reference_value)"
+}
+
+// 8.2.91 Additional Usage Reports Information
+type record Additional_Usage_Reports_Information {
+  LIN2_BO_LAST      elementIdentifier(126),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              auri,
+  integer           no_aur_value
+} with {
+  variant "PRESENCE (elementIdentifier = 126; )"
+  variant (auri,no_aur_value) "FIELDORDER(msb)"
+  variant (no_aur_value) "FIELDLENGTH(15), COMP(nosign), BYTEORDER(last)"
+  variant (lengthIndicator) "LENGTHTO(auri,no_aur_value)"
+}
+
+
+// 8.2.92 Traffic Endpoint ID
+type record Traffic_Endpoint_ID {
+  LIN2_BO_LAST      elementIdentifier(131),
+  LIN2_BO_LAST      lengthIndicator,
+  INT1              endpoint_id
+} with {
+  variant "PRESENCE (elementIdentifier = 131; )"
+  variant (lengthIndicator) "LENGTHTO(endpoint_id)"
+}
+
+// 8.2.93 MAC address
+type record MAC_address {
+  LIN2_BO_LAST      elementIdentifier(133),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              sour,
+  BIT1              dest,
+  BIT1              usou,
+  BIT1              udes,
+  BIT4              spare,
+  OCT6              source_mac_adress optional,
+  OCT6              dest_mac_adress optional,
+  OCT6              upper_source_mac_adress optional,
+  OCT6              upper_dest_mac_adress optional
+} with {
+  variant "PRESENCE (elementIdentifier = 133; )"
+  variant (source_mac_adress) "PRESENCE(sour='1'B)"
+  variant (dest_mac_adress) "PRESENCE(dest='1'B)"
+  variant (upper_dest_mac_adress) "PRESENCE(udes='1'B)"
+  variant (upper_source_mac_adress) "PRESENCE(usou='1'B)"
+  variant (lengthIndicator) "LENGTHTO(sour,dest,usou,udes,spare,source_mac_adress,dest_mac_adress,upper_source_mac_adress,upper_dest_mac_adress)"
+}
+
+
+// 8.2.94 C-Tag
+type record C_TAG {
+  LIN2_BO_LAST      elementIdentifier(134),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              pcp,
+  BIT1              dei,
+  BIT1              vid,
+  BIT5              spare,
+  BIT3              pcp_value,
+  BIT1              dei_flag,
+  BIT12             c_vid_value
+} with {
+  variant "PRESENCE (elementIdentifier = 134; )"
+  variant (lengthIndicator) "LENGTHTO(pcp,dei,vid,spare,pcp_value,dei_flag,c_vid_value)"
+}
+
+// 8.2.95 S-Tag
+type record S_TAG {
+  LIN2_BO_LAST      elementIdentifier(135),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              pcp,
+  BIT1              dei,
+  BIT1              vid,
+  BIT5              spare,
+  BIT3              pcp_value,
+  BIT1              dei_flag,
+  BIT12             c_vid_value
+} with {
+  variant "PRESENCE (elementIdentifier = 135; )"
+  variant (lengthIndicator) "LENGTHTO(pcp,dei,vid,spare,pcp_value,dei_flag,c_vid_value)"
+}
+
+// 8.2.96 Ether Type
+type record Ether_Type {
+  LIN2_BO_LAST      elementIdentifier(136),
+  LIN2_BO_LAST      lengthIndicator,
+  OCT2              ethertype
+} with {
+  variant "PRESENCE (elementIdentifier = 136; )"
+  variant (lengthIndicator) "LENGTHTO(ethertype)"
+}
+
+// 8.2.97 Proxying
+type record Proxying {
+  LIN2_BO_LAST      elementIdentifier(137),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              arp,
+  BIT1              ins,
+  BIT6              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 137; )"
+  variant (lengthIndicator) "LENGTHTO(arp,ins,spare)"
+}
+
+// 8.2.98 Ether Filter ID
+type record Ethernet_Filter_ID {
+  LIN2_BO_LAST      elementIdentifier(138),
+  LIN2_BO_LAST      lengthIndicator,
+  LIN4_BO_LAST      ether_filter_ID_value
+} with {
+  variant "PRESENCE (elementIdentifier = 138; )"
+  variant (lengthIndicator) "LENGTHTO(ether_filter_ID_value)"
+}
+// 8.2.99 Ethernet Filter Properties
+type record Ethernet_Filter_Properties {
+  LIN2_BO_LAST      elementIdentifier(139),
+  LIN2_BO_LAST      lengthIndicator,
+  BIT1              bide,
+  BIT7              spare
+} with {
+  variant "PRESENCE (elementIdentifier = 139; )"
+  variant (lengthIndicator) "LENGTHTO(bide,spare)"
+}
+
+
+// Message Header
+// 7.2
+type record PDU_PFCP {
+  BIT1              s_flag,
+  BIT1              mp,
+  BIT3              spare,
+  INT3b             version,
+  INT1              message_type,
+  LIN2_BO_LAST      lengthIndicator,
+  OCT8              seid optional,
+  LIN3_BO_LAST      sequence_number,
+  BIT4              spare2,
+  BIT4              mp_or_spare,  // valid only if mp == '1'B, should be '0000'B otherwise
+  PFCP_message_body message_body
+} with {
+  variant (seid) "PRESENCE(s_flag = '1'B)"
+  variant (lengthIndicator) "LENGTHTO(seid,sequence_number,spare2,mp_or_spare,message_body)"
+  variant (message_body) " CROSSTAG(
+     heartbeat_request,                    message_type = 1;
+     heartbeat_response,                   message_type = 2;
+     pfcp_PFD_management_request,            message_type = 3;
+     pfcp_PFD_management_response,           message_type = 4;
+     pfcp_association_setup_request,         message_type = 5;
+     pfcp_association_setup_response,        message_type = 6;
+     pfcp_association_update_request,        message_type = 7;
+     pfcp_association_update_response,       message_type = 8;
+     pfcp_association_release_request,       message_type = 9;
+     pfcp_association_release_response,      message_type = 10;
+     pfcp_version_not_supported_response,    message_type = 11;
+     pfcp_node_report_request,               message_type = 12;
+     pfcp_node_report_response,              message_type = 13;
+     pfcp_session_set_deletion_request,      message_type = 14;
+     pfcp_session_set_deletion_response,     message_type = 15;
+     pfcp_session_establishment_request,     message_type = 50;
+     pfcp_session_establishment_response,    message_type = 51;
+     pfcp_session_modification_request,      message_type = 52;
+     pfcp_session_modification_response,     message_type = 53;
+     pfcp_session_deletion_request,          message_type = 54;
+     pfcp_session_deletion_response,         message_type = 55;
+     pfcp_session_report_request,            message_type = 56;
+     pfcp_session_report_response,           message_type = 57;
+  )"
+}
+
+// 7.4 PFCP Node Related Messages
+
+// 7.4.2.1  Heartbeat Request
+type set Heartbeat_Request {
+  Recovery_Time_Stamp  recovery_time_stamp
+}
+
+// 7.4.2.1  Heartbeat Response
+type set Heartbeat_Response {
+  Recovery_Time_Stamp  recovery_time_stamp
+}
+
+// 7.4.3.2 PFCP PFD Management Request
+type set PFCP_PFD_Management_Request {
+  record of Application_IDs_PFDs  application_IDs_PFDs_list optional
+} with {
+  variant (application_IDs_PFDs_list) "REPEATABLE(yes)"
+}
+
+// 7.4.3.1-2 Application ID's PFDs
+type record Application_IDs_PFDs {
+  LIN2_BO_LAST      elementIdentifier(58),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    Application_ID    application_id,
+    record of PFD     PFDs optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 58; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+  variant (grouped_ie.PFDs) "REPEATABLE(yes)"
+}
+
+// 7.4.3.1-3
+type record PFD {
+  LIN2_BO_LAST      elementIdentifier(59),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    record of PFD_Contents  PFD_Contents_list
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 59; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+  variant (grouped_ie.PFD_Contents_list) "REPEATABLE(yes)"
+}
+
+// 7.4.3.2 PFCP PFD Management Response
+type set PFCP_PFD_Management_Response {
+  Cause             cause,
+  Offending_IE      offending_ie optional
+}
+
+// 7.4.4.1 PFCP Association Setup Request
+type set PFCP_Association_Setup_Request{
+  Node_ID               node_id,
+  Recovery_Time_Stamp   time_stamp,
+  UP_Function_Features  up_function_features optional,
+  CP_Function_Features  cp_function_features optional,
+  UP_IP_Resource_Information_list UP_IP_resource_list optional
+} with {
+  variant (UP_IP_resource_list) "REPEATABLE(yes)"
+}
+
+
+// 7.4.4.2 PFCP Association Setup Response
+type set PFCP_Association_Setup_Response{
+  Node_ID               node_id,
+  Cause                 cause,
+  Recovery_Time_Stamp   time_stamp,
+  UP_Function_Features  up_function_features optional,
+  CP_Function_Features  cp_function_features optional,
+  UP_IP_Resource_Information_list UP_IP_resource_list optional
+} with {
+  variant (UP_IP_resource_list) "REPEATABLE(yes)"
+}
+
+
+// 7.4.4.3 PFCP Association Update Request
+type set PFCP_Association_Update_Request{
+  Node_ID               node_id,
+  UP_Function_Features  up_function_features optional,
+  CP_Function_Features  cp_function_features optional,
+  PFCP_Association_Release_Request_IE sarr optional,
+  Graceful_Release_Period graceful_release_period optional,
+  UP_IP_Resource_Information_list UP_IP_resource_list optional
+} with {
+  variant (UP_IP_resource_list) "REPEATABLE(yes)"
+}
+
+// 7.4.4.4 PFCP Association Setup Response
+type set PFCP_Association_Update_Response{
+  Node_ID               node_id,
+  Cause                 cause,
+  UP_Function_Features  up_function_features optional,
+  CP_Function_Features  cp_function_features optional
+}
+
+// 7.4.4.5 PFCP Association Release Request
+type set PFCP_Association_Release_Request{
+  Node_ID               node_id
+}
+
+// 7.4.4.6 PFCP Association Release Response
+type set PFCP_Association_Release_Response{
+  Node_ID               node_id,
+  Cause                 cause
+}
+
+// 7.4.4.7 PFCP Version Not Supported Response
+type set PFCP_Version_Not_Supported_Response{
+}
+
+// 7.4.5.1 PFCP Node Report Request
+type set PFCP_Node_Report_Request{
+  Node_ID               node_id,
+  Node_Report_Type      node_report_type,
+  User_Plane_Path_Failure_Report failure_report optional
+}
+
+// User Plane Path Failure IE within PFCP Node Report Request
+type record User_Plane_Path_Failure_Report {
+  LIN2_BO_LAST      elementIdentifier(102),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    record of Remote_GTP_U_Peer  remote_GTP_U_peer_list
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 102; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+  variant (grouped_ie.remote_GTP_U_peer_list) "REPEATABLE(yes)"
+}
+
+// 7.4.5.2 PFCP Node Report Response
+type set PFCP_Node_Report_Response{
+  Node_ID               node_id,
+  Cause                 cause,
+  Offending_IE          offending_IE optional
+}
+
+// 7.4.6.1 PFCP Session Set Deletion Request
+type set PFCP_Session_Set_Deletion_Request{
+  Node_ID               node_id,
+  FQ_CSID_list          node_list optional
+} with {
+  variant (node_list) "REPEATABLE(yes)"
+}
+
+// 7.4.6.2 PFCP Session Set Deletion Response
+type set PFCP_Session_Set_Deletion_Response{
+  Node_ID               node_id,
+  Cause                 cause,
+  Offending_IE          offending_IE optional
+}
+
+// 7.5.2 PFCP Session Establishment Request
+type set PFCP_Session_Establishment_Request{
+  Node_ID               node_id,
+  F_SEID                CP_F_SEID,
+  Create_PDR_list       create_PDR_list,
+  Create_FAR_list       create_FAR_list,
+  Create_URR_list       create_URR_list optional,
+  Create_QER_list       create_QER_list optional,
+  Create_BAR            create_BAR optional,
+  record of Create_Traffic_Endpoint create_traffic_endpoint_list optional,
+  PDN_Type              pdn_type optional,
+  FQ_CSID_list          node_list optional,
+  UP_Inactivity_Timer   up_inactivity_timer optional
+} with {
+  variant (create_PDR_list) "REPEATABLE(yes)"
+  variant (create_FAR_list) "REPEATABLE(yes)"
+  variant (create_URR_list) "REPEATABLE(yes)"
+  variant (create_QER_list) "REPEATABLE(yes)"
+  variant (node_list) "REPEATABLE(yes)"
+}
+
+type record Create_Traffic_Endpoint {
+  LIN2_BO_LAST      elementIdentifier(127),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    Traffic_Endpoint_ID         traffic_endpint_id,
+    F_TEID                      local_F_TEID optional,
+    Network_Instance            network_instance optional,
+    UE_IP_Address               ue_ip_address optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 127; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Create_PDR{
+  LIN2_BO_LAST      elementIdentifier(1),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    PDR_ID                      pdr_id,
+    Precedence                  precedence optional,
+    PDI_IE                      pdi,
+    Outer_Header_Removal        outer_header_removal optional,
+    record of FAR_ID            FAR_ID_list optional,
+    URR_ID_list                 uRR_ID_list optional,
+    QER_ID_list                 qER_ID_list optional,
+    Activate_Predefined_Rules   activate_predefined_rules optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 1; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+  variant (grouped_ie.FAR_ID_list) "REPEATABLE(yes)"
+  variant (grouped_ie.uRR_ID_list) "REPEATABLE(yes)"
+  variant (grouped_ie.qER_ID_list) "REPEATABLE(yes)"
+}
+
+type record of Create_PDR Create_PDR_list;
+
+type record PDI_IE {
+  LIN2_BO_LAST      elementIdentifier(2),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    Source_Interface             source_interface,
+    F_TEID                       local_F_TEID optional,
+    PDN_Instance                 pdn_instance optional,
+    UE_IP_Address                ue_ip_address optional,
+    Traffic_Endpoint_ID          traffic_endpoint_id optional,
+    SDF_Filter_list              sdf_filter_list optional,
+    Application_ID               application_id optional,
+    record of Ethernet_Packet_Filter  ethernet_packet_filter_list optional,
+    record of QFI                qfi_list optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 2; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+  variant (grouped_ie.sdf_filter_list) "REPEATABLE(yes)"
+  variant (grouped_ie.ethernet_packet_filter_list) "REPEATABLE(yes)"
+  variant (grouped_ie.qfi_list) "REPEATABLE(yes)"
+}
+
+type record Ethernet_Packet_Filter {
+  LIN2_BO_LAST      elementIdentifier(132),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    Ethernet_Filter_ID           ethernet_filter_id optional,
+    Ethernet_Filter_Properties   ethernet_filter_properties optional,
+    MAC_address                  mac_address optional,
+    Ether_Type                   ethertype optional,
+    C_TAG                        c_tag optional,
+    S_TAG                        s_tag optional,
+    SDF_Filter_list              sdf_filter_list optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 132; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+  variant (grouped_ie.sdf_filter_list) "REPEATABLE(yes)"
+}
+
+type record of Create_FAR Create_FAR_list;
+
+type record Create_FAR{
+  LIN2_BO_LAST      elementIdentifier(3),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    FAR_ID                      far_id,
+    Apply_Action                apply_action,
+    Forwarding_Parameters       forwarding_parameters optional,
+    Duplicating_Parameters      duplicating_parameters optional,
+    BAR_ID                      bar_id optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 3; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Forwarding_Parameters {
+  LIN2_BO_LAST      elementIdentifier(4),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    Destination_Interface       destination_interface,
+    PDN_Instance                pdn_Instance optional,
+    Redirect_Information        redirect_information optional,
+    Outer_Header_Creation       outer_header_creation optional,
+    DL_Transport_Level_Marking  transport_level_marking optional,
+    Forwarding_Policy           forwarding_policy optional,
+    Header_Enrichment           header_enrichment optional,
+    Traffic_Endpoint_ID         traffic_endpoint_ID optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 4; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Duplicating_Parameters {
+  LIN2_BO_LAST      elementIdentifier(5),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    Destination_Interface       destination_interface,
+    Outer_Header_Creation       outer_header_creation optional,
+    DL_Transport_Level_Marking  transport_level_marking optional,
+    Forwarding_Policy           forwarding_policy optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 5; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Create_URR{
+  LIN2_BO_LAST      elementIdentifier(6),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    URR_ID                      urr_id,
+    Measurement_Method          measurement_method,
+    Reporting_Triggers          reporting_triggers,
+    Measurement_Period          measurement_period optional,
+    Volume_Threshold            volume_threshold optional,
+    Volume_Quota                volume_quota optional,
+    Time_Threshold              time_threshold optional,
+    Time_Quota                  time_quota optional,
+    Quota_Holding_Time          quota_holding_time optional,
+    Dropped_DL_Traffic_Threshold dropped_dl_traffic_threshold optional,
+    Monitoring_Time             monitoring_time optional,
+    Subsequent_Volume_Threshold subsequent_volume_threshold optional,
+    Subsequent_Time_Threshold   subsequent_time_threshold optional,
+    Subsequent_Volume_Quota     subsequent_volume_quota optional,
+    Subsequent_Time_Quota       subsequent_time_quota optional,
+    Inactivity_Detection_Time   inactivity_detection_time optional,
+    Linked_URR_ID               linked_urr_id optional,
+    Measurement_Information     measurement_information optional,
+    Time_Quota_Mechanism        time_qouta_mechanism optional,
+    Aggregated_URR_list         aggregated_urrs optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 6; )"
+  variant (grouped_ie.aggregated_urrs) "REPEATABLE(yes)"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record of Create_URR Create_URR_list;
+
+type record Aggregated_URR{
+  LIN2_BO_LAST      elementIdentifier(118),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    Aggregated_URR_ID           aggregated_urr_id,
+    Multiplier                  multiplier
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 118; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+type record of Aggregated_URR Aggregated_URR_list;
+
+type record Create_QER{
+  LIN2_BO_LAST      elementIdentifier(7),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    QER_ID                      qer_id,
+    QER_Correlation_ID          qer_correlation_id optional,
+    Gate_Status                 gate_status,
+    MBR                         mbr optional,
+    GBR                         gbr optional,
+    Packet_Rate                 packet_rate optional,
+    DL_Transport_Level_Marking  dl_transport_level_marking optional,
+    QFI                         qfi optional,
+    RQI                         rqi optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 7; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record of Create_QER Create_QER_list;
+
+type record Create_BAR{
+  LIN2_BO_LAST      elementIdentifier(85),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    BAR_ID                      bar_id,
+    Downlink_Data_Notification_Delay downlink_data_notification_delay optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 85; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+// 7.5.3 PFCP Session Establishment Response
+type set PFCP_Session_Establishment_Response {
+  Node_ID               node_id,
+  Cause                 cause,
+  Offending_IE          offending_ie optional,
+  F_SEID                UP_F_SEID,
+  record of Created_PDR created_PDR_list,
+  Load_Control_Information load_control_information optional,
+  Overload_Control_Information overload_control_information optional,
+  FQ_CSID_list          node_list optional,
+  Failed_Rule_ID        failed_rule_id optional,
+  record of Created_Traffic_Endpoint created_traffic_endpoint_list optional
+} with {
+  variant (created_PDR_list) "REPEATABLE(yes)"
+  variant (node_list) "REPEATABLE(yes)"
+  variant (created_traffic_endpoint_list) "REPEATABLE(yes)"
+}
+
+type record Created_PDR{
+  LIN2_BO_LAST      elementIdentifier(8),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    PDR_ID                      pdr_id,
+    F_TEID                      local_F_TEID optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 8; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Load_Control_Information{
+  LIN2_BO_LAST      elementIdentifier(50),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+     Sequence_Number            sequence_number,
+     Metric                     local_metric
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 50; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Overload_Control_Information{
+  LIN2_BO_LAST      elementIdentifier(54),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+     Sequence_Number            sequence_number,
+     Metric                     overload_reduction_metric,
+     Timer_IE                   period_of_validity,
+     OCI_Flags                  oci_flags
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 54; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Created_Traffic_Endpoint {
+  LIN2_BO_LAST      elementIdentifier(128),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    Traffic_Endpoint_ID         traffic_endpint_id,
+    F_TEID                      local_F_TEID optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 128; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+// 7.5.4 PFCP Session Modification Request
+type set PFCP_Session_Modification_Request {
+  F_SEID                              f_seid optional,
+  record of Remove_PDR                remove_PDR_list optional,
+  record of Remove_FAR                remove_FAR_list optional,
+  record of Remove_URR                remove_URR_list optional,
+  record of Remove_QER                remove_QER_list optional,
+  Remove_BAR                          remove_BAR optional,
+  Remove_Traffic_Endpoint             remove_traffic_endpoint optional,
+  Create_PDR_list                     create_PDR_list optional,
+  Create_FAR_list                     create_FAR_list optional,
+  Create_URR_list                     create_URR_list optional,
+  Create_QER_list                     create_QER_list optional,
+  Create_BAR                          create_BAR  optional,
+  Create_Traffic_Endpoint             create_traffic_endpoint optional,
+  record of Update_PDR                update_PDR_list optional,
+  record of Update_FAR                update_FAR_list optional,
+  record of Update_URR                update_URR_list optional,
+  record of Update_QER                update_QER_list optional,
+  Update_BAR                          update_BAR optional,
+  Update_Traffic_Endpoint             update_traffic_endpoint optional,
+  PFCPSMReq_Flags                     pfcpSMReq_flags optional,
+  record of Query_URR                 query_URR_list optional,
+  FQ_CSID_list                        node_list optional,
+  UP_Inactivity_Timer                 up_inactivity_timer optional,
+  Query_URR_Reference                 querry_urr_reference optional
+} with {
+  variant (remove_PDR_list) "REPEATABLE(yes)"
+  variant (remove_FAR_list) "REPEATABLE(yes)"
+  variant (remove_URR_list) "REPEATABLE(yes)"
+  variant (remove_QER_list) "REPEATABLE(yes)"
+  variant (update_PDR_list) "REPEATABLE(yes)"
+  variant (update_FAR_list) "REPEATABLE(yes)"
+  variant (update_URR_list) "REPEATABLE(yes)"
+  variant (update_QER_list) "REPEATABLE(yes)"
+  variant (query_URR_list) "REPEATABLE(yes)"
+  variant (create_PDR_list) "REPEATABLE(yes)"
+  variant (create_FAR_list) "REPEATABLE(yes)"
+  variant (create_URR_list) "REPEATABLE(yes)"
+  variant (create_QER_list) "REPEATABLE(yes)"
+  variant (node_list) "REPEATABLE(yes)"
+}
+
+type record Update_PDR{
+  LIN2_BO_LAST      elementIdentifier(9),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    PDR_ID                      pdr_id,
+    Outer_Header_Removal        outer_header_removal optional,
+    Precedence                  precedence optional,
+    PDI_IE                      pdi optional,
+    FAR_ID                      far_id optional,
+    URR_ID_list                 uRR_ID_list optional,
+    QER_ID_list                 qER_ID_list optional,
+    Activate_Predefined_Rules   activate_predefined_rules optional,
+    Deactivate_Predefined_Rules deactivate_predefined_rules optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 9; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+  variant (grouped_ie.uRR_ID_list) "REPEATABLE(yes)"
+  variant (grouped_ie.qER_ID_list) "REPEATABLE(yes)"
+}
+
+type record Update_FAR{
+  LIN2_BO_LAST      elementIdentifier(10),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    FAR_ID                      far_id,
+    Apply_Action                apply_action optional,
+    Update_Forwarding_Parameters       forwarding_parameters optional,
+    Update_Duplicating_Parameters      duplicating_parameters optional,
+    BAR_ID                      bar_id optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 10; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Update_Forwarding_Parameters {
+  LIN2_BO_LAST      elementIdentifier(11),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    Destination_Interface       destination_interface optional,
+    PDN_Instance                pdn_Instance optional,
+    Redirect_Information        redirect_information optional,
+    Outer_Header_Creation       outer_header_creation optional,
+    DL_Transport_Level_Marking  transport_level_marking optional,
+    Forwarding_Policy           forwarding_policy optional,
+    Header_Enrichment           header_enrichment optional,
+    PFCPSMReq_Flags             pfcpSMReq_flags optional,
+    Traffic_Endpoint_ID         traffic_endpoint_id optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 11; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Update_Duplicating_Parameters {
+  LIN2_BO_LAST      elementIdentifier(105),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    Destination_Interface       destination_interface optional,
+    Outer_Header_Creation       outer_header_creation optional,
+    DL_Transport_Level_Marking  transport_level_marking optional,
+    Forwarding_Policy           forwarding_policy optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 105; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Update_URR{
+  LIN2_BO_LAST      elementIdentifier(13),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    URR_ID                      urr_id,
+    Measurement_Method          measurement_method optional,
+    Reporting_Triggers          reporting_triggers optional,
+    Measurement_Period          measurement_period optional,
+    Volume_Threshold            volume_threshold optional,
+    Volume_Quota                volume_quota optional,
+    Time_Threshold              time_threshold optional,
+    Time_Quota                  time_quota optional,
+    Quota_Holding_Time          quota_holding_time optional,
+    Dropped_DL_Traffic_Threshold dropped_dl_traffic_threshold optional,
+    Monitoring_Time             monitoring_time optional,
+    Subsequent_Volume_Threshold subsequent_volume_threshold optional,
+    Subsequent_Time_Threshold   subsequent_time_threshold optional,
+    Subsequent_Volume_Quota     subsequent_volume_quota optional,
+    Subsequent_Time_Quota       subsequent_time_quota optional,
+    Inactivity_Detection_Time   inactivity_detection_time optional,
+    Linked_URR_ID               linked_urr_id optional,
+    Measurement_Information     measurement_information optional,
+    Time_Quota_Mechanism        time_qouta_mechanism optional,
+    Aggregated_URR_list         aggregated_urrs optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 13; )"
+  variant (grouped_ie.aggregated_urrs) "REPEATABLE(yes)"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Update_QER{
+  LIN2_BO_LAST      elementIdentifier(14),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    QER_ID                      qer_id,
+    QER_Correlation_ID          qer_correlation_id optional,
+    Gate_Status                 gate_status optional,
+    MBR                         mbr optional,
+    GBR                         gbr optional,
+    Packet_Rate                 packet_rate optional,
+    DL_Flow_Level_Marking       dl_flow_level_marking optional,
+    QFI                         qfi optional,
+    RQI                         rqi optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 14; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Update_BAR{
+  LIN2_BO_LAST      elementIdentifier(86),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    BAR_ID                      bar_id,
+    Downlink_Data_Notification_Delay downlink_data_notification_delay optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 86; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Remove_PDR{
+  LIN2_BO_LAST      elementIdentifier(15),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    PDR_ID                      pdr_id
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 15; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Remove_FAR{
+  LIN2_BO_LAST      elementIdentifier(16),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    FAR_ID                      far_id
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 16; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Remove_URR{
+  LIN2_BO_LAST      elementIdentifier(17),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    URR_ID                      urr_id
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 17; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Remove_QER{
+  LIN2_BO_LAST      elementIdentifier(18),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    QER_ID                      qer_id
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 18; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Query_URR{
+  LIN2_BO_LAST      elementIdentifier(77),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    URR_ID                      urr_id
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 77; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Remove_BAR{
+  LIN2_BO_LAST      elementIdentifier(87),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    BAR_ID                      bar_id
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 87; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Update_Traffic_Endpoint {
+  LIN2_BO_LAST      elementIdentifier(129),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    Traffic_Endpoint_ID         traffic_endpint_id,
+    F_TEID                      local_F_TEID optional,
+    Network_Instance            network_instance optional,
+    UE_IP_Address               ue_ip_address optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 129; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Remove_Traffic_Endpoint {
+  LIN2_BO_LAST      elementIdentifier(130),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    Traffic_Endpoint_ID         traffic_endpint_id
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 130; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+// 7.5.5 PFCP Session Modification Response
+type set PFCP_Session_Modification_Response {
+  Cause                               cause,
+  Offending_IE                        offending_IE optional,
+  Created_PDR                         created_PDR optional,
+  Load_Control_Information            load_control_information optional,
+  Overload_Control_Information        overload_control_information optional,
+  record of Usage_Report_Modification_Response  usage_report optional,
+  Failed_Rule_ID                      failed_rule_id optional,
+  Additional_Usage_Reports_Information additional_usage_reports_information optional,
+  Created_Traffic_Endpoint            created_updated_traffic_endpoint optional
+} with {
+  variant (usage_report) "REPEATABLE(yes)"
+}
+
+type record Usage_Report_Modification_Response {
+  LIN2_BO_LAST      elementIdentifier(78),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    URR_ID                      urr_id,
+    UR_SEQN                     ur_seqn,
+    Usage_Report_Trigger        usage_report_trigger,
+    Start_Time                  start_time optional,
+    End_Time                    end_time optional,
+    Volume_Measurement          volume_measurement optional,
+    Duration_Measurement        duration_measurement optional,
+    Time_of_First_Packet        time_of_first_packet optional,
+    Time_of_Last_Packet         time_of_last_packet optional,
+    Usage_Information           usage_information optional,
+    Query_URR_Reference         query_urr_reference optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 78; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+// 7.5.6 PFCP Session Deletion Request
+type set PFCP_Session_Deletion_Request{
+}
+
+// 7.5.7 PFCP Session Deletion Response
+type set PFCP_Session_Deletion_Response {
+  Cause                               cause,
+  Offending_IE                        offending_IE optional,
+  Load_Control_Information            load_control_information optional,
+  Overload_Control_Information        overload_control_information optional,
+  record of Usage_Report_Deletion_Response  usage_report optional
+} with {
+  variant (usage_report) "REPEATABLE(yes)"
+}
+
+
+type record Usage_Report_Deletion_Response {
+  LIN2_BO_LAST      elementIdentifier(79),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    URR_ID                      urr_id,
+    UR_SEQN                     ur_seqn,
+    Usage_Report_Trigger        usage_report_trigger,
+    Start_Time                  start_time optional,
+    End_Time                    end_time optional,
+    Volume_Measurement          volume_measurement optional,
+    Duration_Measurement        duration_measurement optional,
+    Time_of_First_Packet        time_of_first_packet optional,
+    Time_of_Last_Packet         time_of_last_packet optional,
+    Usage_Information           usage_information optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 79; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+// 7.5.8 PFCP Session Report Request
+type set PFCP_Session_Report_Request {
+  Report_Type                         report_type,
+  Downlink_Data_Report                downlink_data_report optional,
+  record of Usage_Report_Report_Request usage_report optional,
+  Error_Indication_Report             error_indication_report optional,
+  Load_Control_Information            load_control_information optional,
+  Overload_Control_Information        overload_control_information optional,
+  Additional_Usage_Reports_Information additional_usage_reports_information optional
+} with {
+  variant (usage_report) "REPEATABLE(yes)"
+}
+
+type record Downlink_Data_Report {
+  LIN2_BO_LAST      elementIdentifier(83),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    record of PDR_ID                      pdr_id_list,
+    record of Downlink_Data_Service_Information dl_service_information_list optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 83; )"
+  variant (grouped_ie.pdr_id_list) "REPEATABLE(yes)"
+  variant (grouped_ie.dl_service_information_list) "REPEATABLE(yes)"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Usage_Report_Report_Request {
+  LIN2_BO_LAST      elementIdentifier(80),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    URR_ID                      urr_id,
+    UR_SEQN                     ur_seqn,
+    Usage_Report_Trigger        usage_report_trigger,
+    Start_Time                  start_time optional,
+    End_Time                    end_time optional,
+    Volume_Measurement          volume_measurement optional,
+    Duration_Measurement        duration_measurement optional,
+    Application_Detection_Information application_detection_information optional,
+    UE_IP_Address               ue_ip_address optional,
+    PDN_Instance                pdn_instance optional,
+    Time_of_First_Packet        time_of_first_packet optional,
+    Time_of_Last_Packet         time_of_last_packet optional,
+    Usage_Information           usage_information optional,
+    Query_URR_Reference         query_urr_reference optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 80; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Application_Detection_Information {
+  LIN2_BO_LAST      elementIdentifier(68),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    Application_ID               application_id,
+    Application_Instance_ID      application_instance_id optional,
+    Flow_Information             flow_information optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 68; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type record Error_Indication_Report {
+  LIN2_BO_LAST      elementIdentifier(99),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    record of F_TEID                     f_teid_list
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 99; )"
+  variant (grouped_ie.f_teid_list) "REPEATABLE(yes)"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+// 7.5.9 PFCP Session Report Response
+type set PFCP_Session_Report_Response {
+  Cause                               cause,
+  Offending_IE                        offending_IE optional,
+  Update_BAR_Report_Response          update_BAR optional,
+  PFCPSMRsp_Flags                     pfcpSMRsp_flags optional
+}
+
+type record Update_BAR_Report_Response{
+  LIN2_BO_LAST      elementIdentifier(12),
+  LIN2_BO_LAST      lengthIndicator,
+  set {
+    BAR_ID                                bar_id,
+    Downlink_Data_Notification_Delay      downlink_data_notification_delay optional,
+    DL_Buffering_Duration                 dl_buffering_duration optional,
+    DL_Buffering_Suggested_Packet_Count   dl_buffering_suggested_packet_count optional
+  }  grouped_ie
+} with {
+  variant "PRESENCE (elementIdentifier = 12; )"
+  variant (lengthIndicator) "LENGTHTO(grouped_ie)"
+}
+
+type union PFCP_message_body{
+  Heartbeat_Request                   heartbeat_request,
+  Heartbeat_Response                  heartbeat_response,
+  PFCP_PFD_Management_Request           pfcp_PFD_management_request,
+  PFCP_PFD_Management_Response          pfcp_PFD_management_response,
+  PFCP_Association_Setup_Request        pfcp_association_setup_request,
+  PFCP_Association_Setup_Response       pfcp_association_setup_response,
+  PFCP_Association_Update_Request       pfcp_association_update_request,
+  PFCP_Association_Update_Response      pfcp_association_update_response,
+  PFCP_Association_Release_Request      pfcp_association_release_request,
+  PFCP_Association_Release_Response     pfcp_association_release_response,
+  PFCP_Version_Not_Supported_Response   pfcp_version_not_supported_response,
+  PFCP_Node_Report_Request              pfcp_node_report_request,
+  PFCP_Node_Report_Response             pfcp_node_report_response,
+  PFCP_Session_Set_Deletion_Request     pfcp_session_set_deletion_request,
+  PFCP_Session_Set_Deletion_Response    pfcp_session_set_deletion_response,
+  PFCP_Session_Establishment_Request    pfcp_session_establishment_request,
+  PFCP_Session_Establishment_Response   pfcp_session_establishment_response,
+  PFCP_Session_Modification_Request     pfcp_session_modification_request,
+  PFCP_Session_Modification_Response    pfcp_session_modification_response,
+  PFCP_Session_Deletion_Request         pfcp_session_deletion_request,
+  PFCP_Session_Deletion_Response        pfcp_session_deletion_response,
+  PFCP_Session_Report_Request           pfcp_session_report_request,
+  PFCP_Session_Report_Response          pfcp_session_report_response,
+  octetstring    dummy
+}
+
+
+} with { encode "RAW"}
diff --git a/test/PFCP_Test.cfg b/test/PFCP_Test.cfg
new file mode 100644
index 0000000..97bf2d5
--- /dev/null
+++ b/test/PFCP_Test.cfg
@@ -0,0 +1,13 @@
+[LOGGING]
+LogFile := "logs/%e.%h-%r.%s"
+FileMask := LOG_ALL | DEBUG | MATCHING
+ConsoleMask := ERROR | WARNING | TESTCASE | STATISTICS | PORTEVENT | USER
+LogSourceInfo := Yes
+AppendFile := No
+TimeStampFormat := DateTime
+LogEventTypes := Yes
+SourceInfoFormat := Single
+LogEntityName := Yes
+
+[EXECUTE]
+PFCP_Test.control
diff --git a/test/PFCP_Test.ttcn b/test/PFCP_Test.ttcn
new file mode 100644
index 0000000..a7fbc8c
--- /dev/null
+++ b/test/PFCP_Test.ttcn
@@ -0,0 +1,54 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v2.0
+// which accompanies this distribution, and is available at
+// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:               PFCP_Test.ttcn
+//  Description:        PFCP protocol module
+//  Rev:                <RnXnn>
+//  Prodnr:             CNL 113 875
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 29.244 v15.1.0
+//
+
+module PFCP_Test {
+
+import from PFCP_Test_Templates all;
+import from PFCP_Types all;
+
+type component MAIN_CT {}
+
+testcase tc_PFCP_test () runs on MAIN_CT {
+  var octetstring vl_pfcp_pdu_oct := '21320163000000000000000018400100003C000500
+    0500030400010055003800020001001D0004000000FF000200260014000100001500020D0000
+    5D0005026A0000020018000E6170706C69636174696F6E323535005F000100006C0004000000
+    010051000400000001006D0004000000010001004A003800020002001D0004000000FF000200
+    200014000101005D0005066A0000020018000E6170706C69636174696F6E323535006C000400
+    0000020051000400000001006D0004000000010003001C006C000400000001002C0001020004
+    000B002A000101001E000228FF0003002A006C000400000002002C00010200040019002A0001
+    000054000A0100B10A0A0E0B000183001E000228FF0006002000510004000000010025000283
+    00003E000102001F00090100000000004E20000007001B006D0004000000010019000100001A
+    000A0000001000000000100000710001010039000D02000000007A42386005000304'O;
+
+  var octetstring vl_pfcp_pdu_oct_encoded := enc_PDU_PFCP(valueof(t_PDU_PFCP));
+  var PDU_PFCP vl_pfcp_pdu_decoded_v1 := dec_PDU_PFCP(vl_pfcp_pdu_oct);
+  var PDU_PFCP vl_pfcp_pdu_decoded_v2 := dec_PDU_PFCP(vl_pfcp_pdu_oct_encoded);
+  if (match(vl_pfcp_pdu_decoded_v1, valueof(t_PDU_PFCP)) and
+      match(vl_pfcp_pdu_decoded_v1, vl_pfcp_pdu_decoded_v2))
+  {
+    log("Match OK for PDU_PFCP!");
+    setverdict(pass);
+  } else {
+    log("Match failed for PDU_PFCP!");
+    setverdict(fail);
+  }
+}
+
+control {
+  execute (tc_PFCP_test());
+}
+
+}  // end of module
diff --git a/test/PFCP_Test_Templates.ttcn b/test/PFCP_Test_Templates.ttcn
new file mode 100644
index 0000000..3f434b5
--- /dev/null
+++ b/test/PFCP_Test_Templates.ttcn
@@ -0,0 +1,484 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v2.0
+// which accompanies this distribution, and is available at
+// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:               PFCP_Test_Templates.ttcn
+//  Description:        PFCP protocol module
+//  Rev:                <RnXnn>
+//  Prodnr:             CNL 113 875
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 29.244 v15.1.0
+//
+
+module PFCP_Test_Templates {
+
+import from PFCP_Types all;
+
+template PDU_PFCP t_PDU_PFCP :=
+{
+  s_flag := '1'B,
+  mp := '0'B,
+  spare := '000'B,
+  version := 1,
+  message_type := 50,
+  lengthIndicator := 355,
+  seid := '0000000000000000'O,
+  sequence_number := 1589249,
+  spare2 := '0000'B,
+  mp_or_spare := '0000'B,
+  message_body :=
+  {
+    pfcp_session_establishment_request :=
+    {
+      node_id :=
+      {
+        elementIdentifier := 60,
+        lengthIndicator := 5,
+        node_id_type := 0,
+        spare := '0000'B,
+        node_id_value := '05000304'O
+      },
+      CP_F_SEID :=
+      {
+        elementIdentifier := 57,
+        lengthIndicator := 13,
+        v6 := '0'B,
+        v4 := '1'B,
+        spare := '000000'B,
+        seid := '000000007A423860'O,
+        ipv4_address := '05000304'O,
+        ipv6_address := omit
+      },
+      create_PDR_list :=
+      {
+        {
+          elementIdentifier := 1,
+          lengthIndicator := 85,
+          grouped_ie :=
+          {
+            pdr_id :=
+            {
+              elementIdentifier := 56,
+              lengthIndicator := 2,
+              rule_id := '0001'O
+            },
+            precedence :=
+            {
+              elementIdentifier := 29,
+              lengthIndicator := 4,
+              precedence_value := 255
+            },
+            pdi :=
+            {
+              elementIdentifier := 2,
+              lengthIndicator := 38,
+              grouped_ie :=
+              {
+                source_interface :=
+                {
+                  elementIdentifier := 20,
+                  lengthIndicator := 1,
+                  interfacevalue := 0,
+                  spare := '0000'B
+                },
+                local_F_TEID :=
+                {
+                  elementIdentifier := 21,
+                  lengthIndicator := 2,
+                  v4 := '1'B,
+                  v6 := '0'B,
+                  ch := '1'B,
+                  chid := '1'B,
+                  spare := '0000'B,
+                  teid := omit,
+                  ipv4_address := omit,
+                  ipv6_address := omit,
+                  choose_id := '00'O
+                },
+                pdn_instance := omit,
+                ue_ip_address :=
+                {
+                  elementIdentifier := 93,
+                  lengthIndicator := 5,
+                  v6 := '0'B,
+                  v4 := '1'B,
+                  sd := '0'B,
+                  spare := '00000'B,
+                  ipv4_address := '6A000002'O,
+                  ipv6_address := omit
+                },
+                traffic_endpoint_id := omit,
+                sdf_filter_list := omit,
+                application_id :=
+                {
+                  elementIdentifier := 24,
+                  lengthIndicator := 14,
+                  application_id := '6170706C69636174696F6E323535'O
+                },
+                ethernet_packet_filter_list := omit,
+                qfi_list := omit
+              }
+            },
+            outer_header_removal :=
+            {
+              elementIdentifier := 95,
+              lengthIndicator := 1,
+              ohc_description := 0
+            },
+            FAR_ID_list :=
+            {
+              {
+                elementIdentifier := 108,
+                lengthIndicator := 4,
+                id_value := 1
+              }
+            },
+            uRR_ID_list :=
+            {
+              {
+                elementIdentifier := 81,
+                lengthIndicator := 4,
+                id_value := 1
+              }
+            },
+            qER_ID_list :=
+            {
+              {
+                elementIdentifier := 109,
+                lengthIndicator := 4,
+                id_value := 1
+              }
+            },
+            activate_predefined_rules := omit
+          }
+        },
+        {
+          elementIdentifier := 1,
+          lengthIndicator := 74,
+          grouped_ie :=
+          {
+            pdr_id :=
+            {
+              elementIdentifier := 56,
+              lengthIndicator := 2,
+              rule_id := '0002'O
+            },
+            precedence :=
+            {
+              elementIdentifier := 29,
+              lengthIndicator := 4,
+              precedence_value := 255
+            },
+            pdi :=
+            {
+              elementIdentifier := 2,
+              lengthIndicator := 32,
+              grouped_ie :=
+              {
+                source_interface :=
+                {
+                  elementIdentifier := 20,
+                  lengthIndicator := 1,
+                  interfacevalue := 1,
+                  spare := '0000'B
+                },
+                local_F_TEID := omit,
+                pdn_instance := omit,
+                ue_ip_address :=
+                {
+                  elementIdentifier := 93,
+                  lengthIndicator := 5,
+                  v6 := '0'B,
+                  v4 := '1'B,
+                  sd := '1'B,
+                  spare := '00000'B,
+                  ipv4_address := '6A000002'O,
+                  ipv6_address := omit
+                },
+                traffic_endpoint_id := omit,
+                sdf_filter_list := omit,
+                application_id :=
+                {
+                  elementIdentifier := 24,
+                  lengthIndicator := 14,
+                  application_id := '6170706C69636174696F6E323535'O
+                },
+                ethernet_packet_filter_list := omit,
+                qfi_list := omit
+              }
+            },
+            outer_header_removal := omit,
+            FAR_ID_list :=
+            {
+              {
+                elementIdentifier := 108,
+                lengthIndicator := 4,
+                id_value := 2
+              }
+            },
+            uRR_ID_list :=
+            {
+              {
+                elementIdentifier := 81,
+                lengthIndicator := 4,
+                id_value := 1
+              }
+            },
+            qER_ID_list :=
+            {
+              {
+                elementIdentifier := 109,
+                lengthIndicator := 4,
+                id_value := 1
+              }
+            },
+            activate_predefined_rules := omit
+          }
+        }
+      },
+      create_FAR_list :=
+      {
+        {
+          elementIdentifier := 3,
+          lengthIndicator := 28,
+          grouped_ie :=
+          {
+            far_id :=
+            {
+              elementIdentifier := 108,
+              lengthIndicator := 4,
+              id_value := 1
+            },
+            apply_action :=
+            {
+              elementIdentifier := 44,
+              lengthIndicator := 1,
+              drop := '0'B,
+              forw := '1'B,
+              buff := '0'B,
+              nocp := '0'B,
+              dupl := '0'B,
+              spare := '000'B
+            },
+            forwarding_parameters :=
+            {
+              elementIdentifier := 4,
+              lengthIndicator := 11,
+              grouped_ie :=
+              {
+                destination_interface :=
+                {
+                  elementIdentifier := 42,
+                  lengthIndicator := 1,
+                  interface_value := 1,
+                  spare := '0000'B
+                },
+                pdn_Instance := omit,
+                redirect_information := omit,
+                outer_header_creation := omit,
+                transport_level_marking :=
+                {
+                  elementIdentifier := 30,
+                  lengthIndicator := 2,
+                  ToS_traffic_class := '28FF'O
+                },
+                forwarding_policy := omit,
+                header_enrichment := omit,
+                traffic_endpoint_ID := omit
+              }
+            },
+            duplicating_parameters := omit,
+            bar_id := omit
+          }
+        },
+        {
+          elementIdentifier := 3,
+          lengthIndicator := 42,
+          grouped_ie :=
+          {
+            far_id :=
+            {
+              elementIdentifier := 108,
+              lengthIndicator := 4,
+              id_value := 2
+            },
+            apply_action :=
+            {
+              elementIdentifier := 44,
+              lengthIndicator := 1,
+              drop := '0'B,
+              forw := '1'B,
+              buff := '0'B,
+              nocp := '0'B,
+              dupl := '0'B,
+              spare := '000'B
+            },
+            forwarding_parameters :=
+            {
+              elementIdentifier := 4,
+              lengthIndicator := 25,
+              grouped_ie :=
+              {
+                destination_interface :=
+                {
+                  elementIdentifier := 42,
+                  lengthIndicator := 1,
+                  interface_value := 0,
+                  spare := '0000'B
+                },
+                pdn_Instance := omit,
+                redirect_information := omit,
+                outer_header_creation :=
+                {
+                  elementIdentifier := 84,
+                  lengthIndicator := 10,
+                  ohc_description_oct5 := '00000001'B,
+                  ohc_description_oct6 := '00000000'B,
+                  teid := 'B10A0A0E'O,
+                  ipv4 := '0B000183'O,
+                  ipv6 := omit,
+                  udp_port := omit
+                },
+                transport_level_marking :=
+                {
+                  elementIdentifier := 30,
+                  lengthIndicator := 2,
+                  ToS_traffic_class := '28FF'O
+                },
+                forwarding_policy := omit,
+                header_enrichment := omit,
+                traffic_endpoint_ID := omit
+              }
+            },
+            duplicating_parameters := omit,
+            bar_id := omit
+          }
+        }
+      },
+      create_URR_list :=
+      {
+        {
+          elementIdentifier := 6,
+          lengthIndicator := 32,
+          grouped_ie :=
+          {
+            urr_id :=
+            {
+              elementIdentifier := 81,
+              lengthIndicator := 4,
+              id_value := 1
+            },
+            measurement_method :=
+            {
+              elementIdentifier := 62,
+              lengthIndicator := 1,
+              durat := '0'B,
+              volum := '1'B,
+              event := '0'B,
+              spare := '00000'B
+            },
+            reporting_triggers :=
+            {
+              elementIdentifier := 37,
+              lengthIndicator := 2,
+              perio := '1'B,
+              volth := '1'B,
+              timth := '0'B,
+              quhti := '0'B,
+              start_ := '0'B,
+              stop_ := '0'B,
+              droth := '0'B,
+              liusa := '1'B,
+              volqu := '0'B,
+              timqu := '0'B,
+              envcl := '0'B,
+              spare := '00000'B
+            },
+            measurement_period := omit,
+            volume_threshold :=
+            {
+              elementIdentifier := 31,
+              lengthIndicator := 9,
+              tovol := '1'B,
+              ulvol := '0'B,
+              dlvol := '0'B,
+              spare := '00000'B,
+              total_volume := 5120000,
+              uplink_volume := omit,
+              downlink_volume := omit
+            },
+            volume_quota := omit,
+            time_threshold := omit,
+            time_quota := omit,
+            quota_holding_time := omit,
+            dropped_dl_traffic_threshold := omit,
+            monitoring_time := omit,
+            subsequent_volume_threshold := omit,
+            subsequent_time_threshold := omit,
+            subsequent_volume_quota := omit,
+            subsequent_time_quota := omit,
+            inactivity_detection_time := omit,
+            linked_urr_id := omit,
+            measurement_information := omit,
+            time_qouta_mechanism := omit,
+            aggregated_urrs := omit
+          }
+        }
+      },
+      create_QER_list :=
+      {
+        {
+          elementIdentifier := 7,
+          lengthIndicator := 27,
+          grouped_ie :=
+          {
+            qer_id :=
+            {
+              elementIdentifier := 109,
+              lengthIndicator := 4,
+              id_value := 1
+            },
+            qer_correlation_id := omit,
+            gate_status :=
+            {
+              elementIdentifier := 25,
+              lengthIndicator := 1,
+              dl_gate := 0,
+              ul_gate := 0,
+              spare := '0000'B
+            },
+            mbr :=
+            {
+              elementIdentifier := 26,
+              lengthIndicator := 10,
+              ul_mbr := '0000001000'O,
+              dl_mbr := '0000001000'O
+            },
+            gbr := omit,
+            packet_rate := omit,
+            dl_transport_level_marking := omit,
+            qfi := omit,
+            rqi := omit
+          }
+        }
+      },
+      create_BAR := omit,
+      create_traffic_endpoint_list := omit,
+      pdn_type :=
+      {
+        elementIdentifier := 113,
+        lengthIndicator := 1,
+        pdn_type := 1,
+        spare := '00000'B
+      },
+      node_list := omit,
+      up_inactivity_timer := omit
+    }
+  }
+};
+
+}  // end of module
diff --git a/test/PFCP_v15.1.0_CNL113875.tpd b/test/PFCP_v15.1.0_CNL113875.tpd
new file mode 100644
index 0000000..089883b
--- /dev/null
+++ b/test/PFCP_v15.1.0_CNL113875.tpd
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>PFCP_v15.1.0_CNL113875_test</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="PFCP_v15.1.0_CNL113875" projectLocationURI="../PFCP_v15.1.0_CNL113875.tpd"/>
+  </ReferencedProjects>
+  <Files>
+    <FileResource projectRelativePath="PFCP_Test.cfg" relativeURI="PFCP_Test.cfg"/>
+    <FileResource projectRelativePath="PFCP_Test.ttcn" relativeURI="PFCP_Test.ttcn"/>
+    <FileResource projectRelativePath="PFCP_Test_Templates.ttcn" relativeURI="PFCP_Test_Templates.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/PFCP_v15.1.0_CNL113875_test</targetExecutable>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>