diff options
author | erititan | 2018-08-10 09:53:20 +0000 |
---|---|---|
committer | erititan | 2018-08-10 09:53:20 +0000 |
commit | d0a5d598cb4dc25fb334c42b4a84617c2832ffcd (patch) | |
tree | 1dadabfe16b4480fccf3de7a9d99ca273f985134 | |
parent | bd8ef44690dd39f09398167d636afbe0c46e9f72 (diff) | |
download | titan.ProtocolModules.PFCP_v15.1.0-d0a5d598cb4dc25fb334c42b4a84617c2832ffcd.tar.gz titan.ProtocolModules.PFCP_v15.1.0-d0a5d598cb4dc25fb334c42b4a84617c2832ffcd.tar.xz titan.ProtocolModules.PFCP_v15.1.0-d0a5d598cb4dc25fb334c42b4a84617c2832ffcd.zip |
First code commitR.2.C
-rw-r--r-- | LICENSE | 277 | ||||
-rw-r--r-- | PFCP_v15.1.0_CNL113875.tpd | 26 | ||||
-rw-r--r-- | doc/PFCP_v15.1.0_CNL113875_1551.doc | bin | 0 -> 84992 bytes | |||
-rw-r--r-- | doc/PFCP_v15.1.0_CNL113875_PRI.doc | bin | 0 -> 65536 bytes | |||
-rw-r--r-- | src/PFCP_Types.ttcn | 2294 | ||||
-rw-r--r-- | test/PFCP_Test.cfg | 13 | ||||
-rw-r--r-- | test/PFCP_Test.ttcn | 54 | ||||
-rw-r--r-- | test/PFCP_Test_Templates.ttcn | 484 | ||||
-rw-r--r-- | test/PFCP_v15.1.0_CNL113875.tpd | 28 |
9 files changed, 3176 insertions, 0 deletions
@@ -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 Binary files differnew file mode 100644 index 0000000..d5f05b1 --- /dev/null +++ b/doc/PFCP_v15.1.0_CNL113875_1551.doc diff --git a/doc/PFCP_v15.1.0_CNL113875_PRI.doc b/doc/PFCP_v15.1.0_CNL113875_PRI.doc Binary files differnew file mode 100644 index 0000000..a49ac68 --- /dev/null +++ b/doc/PFCP_v15.1.0_CNL113875_PRI.doc 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> |